Commit ba131e659e2c2e10daf79f7be755a64c7da99ffe
Exists in
colab
and in
4 other branches
Merge pull request #221 from mezuro/configuration_visibility
Configuration visibility
Showing
60 changed files
with
736 additions
and
255 deletions
Show diff stats
.gitignore
app/assets/stylesheets/form_with_tooltip.css
1 | 1 | .form-table { |
2 | 2 | margin: 0 !important; |
3 | + padding: 20px; | |
3 | 4 | background: #fff; |
4 | 5 | -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075); |
5 | 6 | box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075); |
... | ... | @@ -13,11 +14,32 @@ |
13 | 14 | display: inline-flex; |
14 | 15 | } |
15 | 16 | |
17 | +.form-row:first-child { | |
18 | + border-top: none; | |
19 | +} | |
20 | + | |
21 | +.form-row:last-child { | |
22 | + border-bottom: none; | |
23 | +} | |
24 | + | |
16 | 25 | .field-container { |
17 | 26 | position: relative; |
18 | 27 | float: left; |
19 | 28 | width: 100%; |
20 | - padding: 20px; | |
29 | + padding: 20px 0 20px 0; | |
30 | +} | |
31 | + | |
32 | +.form-row:first-child .field-container { | |
33 | + padding-top: 0; | |
34 | +} | |
35 | + | |
36 | +.form-row:last-child .field-container { | |
37 | + padding-bottom: 0; | |
38 | +} | |
39 | + | |
40 | +.field-container.checkbox, .field-container.radio { | |
41 | + padding-top: 0; | |
42 | + padding-bottom: 0; | |
21 | 43 | } |
22 | 44 | |
23 | 45 | .help-container { | ... | ... |
app/controllers/concerns/ownership_authentication.rb
... | ... | @@ -63,7 +63,7 @@ module OwnershipAuthentication |
63 | 63 | end |
64 | 64 | |
65 | 65 | def check_reading_group_ownership(id) |
66 | - if current_user.reading_group_ownerships.find_by_reading_group_id(id).nil? | |
66 | + if current_user.reading_group_attributes.find_by_reading_group_id(id).nil? | |
67 | 67 | respond_to do |format| |
68 | 68 | format.html { redirect_to reading_group_url(id: id), notice: t('not_allowed') } |
69 | 69 | format.json { head :no_content } |
... | ... | @@ -74,7 +74,7 @@ module OwnershipAuthentication |
74 | 74 | end |
75 | 75 | |
76 | 76 | def check_kalibro_configuration_ownership(id) |
77 | - if current_user.kalibro_configuration_ownerships.find_by_kalibro_configuration_id(id).nil? | |
77 | + if current_user.kalibro_configuration_attributes.find_by_kalibro_configuration_id(id).nil? | |
78 | 78 | respond_to do |format| |
79 | 79 | format.html { redirect_to kalibro_configurations_url(id: id), notice: t('not_allowed') } |
80 | 80 | format.json { head :no_content } | ... | ... |
app/controllers/kalibro_configurations_controller.rb
... | ... | @@ -3,6 +3,7 @@ include OwnershipAuthentication |
3 | 3 | class KalibroConfigurationsController < ApplicationController |
4 | 4 | before_action :authenticate_user!, except: [:index, :show] |
5 | 5 | before_action :kalibro_configuration_owner?, only: [:edit, :update, :destroy] |
6 | + before_action :set_kalibro_configuration, only: [:show, :edit, :update, :destroy] | |
6 | 7 | |
7 | 8 | # GET /kalibro_configurations/new |
8 | 9 | def new |
... | ... | @@ -12,7 +13,7 @@ class KalibroConfigurationsController < ApplicationController |
12 | 13 | # GET /kalibro_configurations |
13 | 14 | # GET /kalibro_configurations.json |
14 | 15 | def index |
15 | - @kalibro_configurations = KalibroConfiguration.all | |
16 | + @kalibro_configurations = KalibroConfiguration.public_or_owned_by_user(current_user) | |
16 | 17 | end |
17 | 18 | |
18 | 19 | # POST /kalibro_configurations |
... | ... | @@ -27,7 +28,6 @@ class KalibroConfigurationsController < ApplicationController |
27 | 28 | # GET /kalibro_configurations/1 |
28 | 29 | # GET /kalibro_configurations/1.json |
29 | 30 | def show |
30 | - set_kalibro_configuration | |
31 | 31 | Rails.cache.fetch("#{@kalibro_configuration.id}_metric_configurations") do |
32 | 32 | @kalibro_configuration.metric_configurations |
33 | 33 | end |
... | ... | @@ -35,13 +35,9 @@ class KalibroConfigurationsController < ApplicationController |
35 | 35 | |
36 | 36 | # GET /kalibro_configurations/1/edit |
37 | 37 | # GET /kalibro_configurations/1/edit.json |
38 | - def edit | |
39 | - set_kalibro_configuration | |
40 | - end | |
41 | - | |
38 | + def edit; end | |
42 | 39 | |
43 | 40 | def update |
44 | - set_kalibro_configuration | |
45 | 41 | if @kalibro_configuration.update(kalibro_configuration_params) |
46 | 42 | redirect_to(kalibro_configuration_path(@kalibro_configuration.id)) |
47 | 43 | else |
... | ... | @@ -52,13 +48,13 @@ class KalibroConfigurationsController < ApplicationController |
52 | 48 | # DELETE /kalibro_configurations/1 |
53 | 49 | # DELETE /kalibro_configurations/1.json |
54 | 50 | def destroy |
55 | - set_kalibro_configuration | |
56 | - current_user.kalibro_configuration_ownerships.find_by_kalibro_configuration_id!(@kalibro_configuration.id).destroy | |
57 | 51 | @kalibro_configuration.destroy |
52 | + | |
58 | 53 | respond_to do |format| |
59 | 54 | format.html { redirect_to kalibro_configurations_url } |
60 | 55 | format.json { head :no_content } |
61 | 56 | end |
57 | + | |
62 | 58 | Rails.cache.delete("#{@kalibro_configuration.id}_metrics") |
63 | 59 | end |
64 | 60 | |
... | ... | @@ -77,7 +73,7 @@ class KalibroConfigurationsController < ApplicationController |
77 | 73 | # Extracted code from create action |
78 | 74 | def create_and_redir(format) |
79 | 75 | if @kalibro_configuration.save |
80 | - current_user.kalibro_configuration_ownerships.create kalibro_configuration_id: @kalibro_configuration.id | |
76 | + current_user.kalibro_configuration_attributes.create(kalibro_configuration_id: @kalibro_configuration.id) | |
81 | 77 | |
82 | 78 | format.html { redirect_to kalibro_configuration_path(@kalibro_configuration.id), notice: t('successfully_created', :record => @kalibro_configuration.model_name.human) } |
83 | 79 | format.json { render action: 'show', status: :created, location: @kalibro_configuration } | ... | ... |
app/controllers/metric_configurations_controller.rb
... | ... | @@ -9,6 +9,9 @@ class MetricConfigurationsController < BaseMetricConfigurationsController |
9 | 9 | super |
10 | 10 | # find_by_name throws an exception instead of returning nil, unlike ActiveRecord's API |
11 | 11 | metric_configuration.metric = KalibroClient::Entities::Processor::MetricCollectorDetails.find_by_name(params[:metric_collector_name]).find_metric_by_code params[:metric_code] |
12 | + @reading_groups = ReadingGroup.public_or_owned_by_user(current_user).map { |reading_group| | |
13 | + [reading_group.name, reading_group.id] | |
14 | + } | |
12 | 15 | end |
13 | 16 | |
14 | 17 | def create |
... | ... | @@ -24,6 +27,9 @@ class MetricConfigurationsController < BaseMetricConfigurationsController |
24 | 27 | #FIXME: set the configuration id just once! |
25 | 28 | @kalibro_configuration_id = params[:kalibro_configuration_id] |
26 | 29 | @metric_configuration.kalibro_configuration_id = @kalibro_configuration_id |
30 | + @reading_groups = ReadingGroup.public_or_owned_by_user(current_user).map { |reading_group| | |
31 | + [reading_group.name, reading_group.id] | |
32 | + } | |
27 | 33 | end |
28 | 34 | |
29 | 35 | def update | ... | ... |
app/controllers/projects_controller.rb
... | ... | @@ -54,7 +54,6 @@ class ProjectsController < ApplicationController |
54 | 54 | # DELETE /project/1.json |
55 | 55 | def destroy |
56 | 56 | set_project |
57 | - current_user.project_attributes.find_by_project_id!(@project.id).destroy | |
58 | 57 | @project.destroy |
59 | 58 | respond_to do |format| |
60 | 59 | format.html { redirect_to projects_url } | ... | ... |
app/controllers/reading_groups_controller.rb
... | ... | @@ -13,7 +13,7 @@ class ReadingGroupsController < ApplicationController |
13 | 13 | # GET /reading_groups |
14 | 14 | # GET /reading_groups.json |
15 | 15 | def index |
16 | - @reading_groups = ReadingGroup.all | |
16 | + @reading_groups = ReadingGroup.public_or_owned_by_user(current_user) | |
17 | 17 | end |
18 | 18 | |
19 | 19 | # POST /reading_groups |
... | ... | @@ -44,7 +44,6 @@ class ReadingGroupsController < ApplicationController |
44 | 44 | # DELETE /reading_group/1 |
45 | 45 | # DELETE /reading_group/1.json |
46 | 46 | def destroy |
47 | - current_user.reading_group_ownerships.find_by_reading_group_id!(@reading_group.id).destroy | |
48 | 47 | @reading_group.destroy |
49 | 48 | respond_to do |format| |
50 | 49 | format.html { redirect_to reading_groups_url } |
... | ... | @@ -68,7 +67,7 @@ class ReadingGroupsController < ApplicationController |
68 | 67 | # Extracted code from create action |
69 | 68 | def create_and_redir(format) |
70 | 69 | if @reading_group.save |
71 | - current_user.reading_group_ownerships.create reading_group_id: @reading_group.id | |
70 | + current_user.reading_group_attributes.create(reading_group_id: @reading_group.id) | |
72 | 71 | |
73 | 72 | format.html { redirect_to reading_group_path(@reading_group.id), notice: t('successfully_created', :record => t(@reading_group.class)) } |
74 | 73 | format.json { render action: 'show', status: :created, location: @reading_group } | ... | ... |
app/controllers/repositories_controller.rb
... | ... | @@ -5,6 +5,7 @@ class RepositoriesController < ApplicationController |
5 | 5 | before_action :project_owner?, only: [:new, :create] |
6 | 6 | before_action :repository_owner?, only: [:edit, :update, :destroy, :process_repository] |
7 | 7 | before_action :set_repository, only: [:show, :edit, :update, :destroy, :state, :state_with_date, :process_repository] |
8 | + before_action :set_project_id_repository_types_and_configurations, only: [:new, :edit] | |
8 | 9 | |
9 | 10 | # GET /projects/1/repositories/1 |
10 | 11 | # GET /projects/1/repositories/1.json |
... | ... | @@ -16,16 +17,11 @@ class RepositoriesController < ApplicationController |
16 | 17 | |
17 | 18 | # GET projects/1/repositories/new |
18 | 19 | def new |
19 | - @project_id = params[:project_id] | |
20 | 20 | @repository = Repository.new |
21 | - @repository_types = Repository.repository_types | |
22 | 21 | end |
23 | 22 | |
24 | 23 | # GET /repositories/1/edit |
25 | - def edit | |
26 | - @project_id = params[:project_id] | |
27 | - @repository_types = Repository.repository_types | |
28 | - end | |
24 | + def edit; end | |
29 | 25 | |
30 | 26 | # POST /projects/1/repositories |
31 | 27 | # POST /projects/1/repositories.json |
... | ... | @@ -89,10 +85,17 @@ class RepositoriesController < ApplicationController |
89 | 85 | end |
90 | 86 | |
91 | 87 | private |
92 | - # Duplicated code on create and update actions extracted here | |
93 | - def failed_action(format, destiny_action) | |
88 | + def set_project_id_repository_types_and_configurations | |
94 | 89 | @project_id = params[:project_id] |
95 | 90 | @repository_types = Repository.repository_types |
91 | + @configurations = KalibroConfiguration.public_or_owned_by_user(current_user).map { |conf| | |
92 | + [conf.name, conf.id] | |
93 | + } | |
94 | + end | |
95 | + | |
96 | + # Duplicated code on create and update actions extracted here | |
97 | + def failed_action(format, destiny_action) | |
98 | + set_project_id_repository_types_and_configurations | |
96 | 99 | |
97 | 100 | format.html { render action: destiny_action } |
98 | 101 | format.json { render json: @repository.errors, status: :unprocessable_entity } | ... | ... |
app/helpers/kalibro_configurations_helper.rb
1 | 1 | module KalibroConfigurationsHelper |
2 | 2 | def kalibro_configuration_owner?(kalibro_configuration_id) |
3 | - user_signed_in? && !current_user.kalibro_configuration_ownerships.find_by_kalibro_configuration_id(kalibro_configuration_id).nil? | |
3 | + user_signed_in? && !current_user.kalibro_configuration_attributes.find_by_kalibro_configuration_id(kalibro_configuration_id).nil? | |
4 | 4 | end |
5 | 5 | |
6 | 6 | def link_to_edit_form(metric_configuration, kalibro_configuration_id) | ... | ... |
app/helpers/reading_groups_helper.rb
1 | 1 | module ReadingGroupsHelper |
2 | 2 | def reading_groups_owner? reading_group_id |
3 | - user_signed_in? && !current_user.reading_group_ownerships.find_by_reading_group_id(reading_group_id).nil? | |
3 | + user_signed_in? && !current_user.reading_group_attributes.find_by_reading_group_id(reading_group_id).nil? | |
4 | 4 | end |
5 | 5 | end |
6 | 6 | \ No newline at end of file | ... | ... |
app/models/kalibro_configuration.rb
1 | 1 | class KalibroConfiguration < KalibroClient::Entities::Configurations::KalibroConfiguration |
2 | 2 | include KalibroRecord |
3 | + attr_writer :attributes | |
4 | + | |
5 | + def self.public_or_owned_by_user(user=nil) | |
6 | + kalibro_configuration_attributes = KalibroConfigurationAttributes.where(public: true) | |
7 | + kalibro_configuration_attributes += KalibroConfigurationAttributes.where(user_id: user.id, public: false) if user | |
8 | + | |
9 | + kalibro_configuration_attributes.map { |kalibro_configuration_attribute| | |
10 | + begin | |
11 | + self.find(kalibro_configuration_attribute.kalibro_configuration_id) | |
12 | + rescue KalibroClient::Errors::RecordNotFound | |
13 | + nil | |
14 | + end | |
15 | + }.compact | |
16 | + end | |
17 | + | |
18 | + def self.public | |
19 | + self.public_or_owned_by_user | |
20 | + end | |
21 | + | |
22 | + def attributes | |
23 | + @attributes ||= KalibroConfigurationAttributes.find_by(kalibro_configuration_id: self.id) | |
24 | + end | |
25 | + | |
26 | + def destroy | |
27 | + attributes.destroy unless attributes.nil? | |
28 | + @attributes = nil | |
29 | + super | |
30 | + end | |
3 | 31 | end | ... | ... |
... | ... | @@ -0,0 +1,13 @@ |
1 | +class KalibroConfigurationAttributes < ActiveRecord::Base | |
2 | + belongs_to :user | |
3 | + validates :kalibro_configuration_id, presence: true | |
4 | + | |
5 | + def kalibro_configuration | |
6 | + @kalibro_configuration ||= KalibroConfiguration.find(kalibro_configuration_id) | |
7 | + end | |
8 | + | |
9 | + def kalibro_configuration=(cfg) | |
10 | + @kalibro_configuration = cfg | |
11 | + self.kalibro_configuration_id = cfg.id | |
12 | + end | |
13 | +end | ... | ... |
app/models/kalibro_configuration_ownership.rb
app/models/project.rb
1 | 1 | class Project < KalibroClient::Entities::Processor::Project |
2 | 2 | include KalibroRecord |
3 | 3 | |
4 | + attr_writer :attributes | |
5 | + | |
4 | 6 | def self.latest(count = 1) |
5 | 7 | all.sort { |a,b| b.id <=> a.id }.select { |project| !project.attributes.hidden}.first(count) |
6 | 8 | end |
7 | 9 | |
8 | 10 | def attributes |
9 | - project_attributes = ProjectAttributes.find_by_project_id(self.id) | |
10 | - project_attributes.nil? ? ProjectAttributes.new : project_attributes | |
11 | + @project_attributes ||= ProjectAttributes.find_by_project_id(self.id) | |
12 | + @project_attributes.nil? ? ProjectAttributes.new : @project_attributes | |
13 | + end | |
14 | + | |
15 | + def destroy | |
16 | + self.attributes.destroy if self.attributes | |
17 | + @project_attributes = nil | |
18 | + super | |
11 | 19 | end |
12 | 20 | end | ... | ... |
app/models/reading_group.rb
1 | 1 | class ReadingGroup < KalibroClient::Entities::Configurations::ReadingGroup |
2 | 2 | include KalibroRecord |
3 | + attr_writer :attributes | |
4 | + | |
5 | + def self.public_or_owned_by_user(user=nil) | |
6 | + reading_group_attributes = ReadingGroupAttributes.where(public: true) | |
7 | + reading_group_attributes += ReadingGroupAttributes.where(user_id: user.id, public: false) if user | |
8 | + | |
9 | + reading_group_attributes.map { |reading_group_attribute| | |
10 | + begin | |
11 | + self.find(reading_group_attribute.reading_group_id) | |
12 | + rescue KalibroClient::Errors::RecordNotFound | |
13 | + nil | |
14 | + end | |
15 | + }.compact | |
16 | + end | |
17 | + | |
18 | + def self.public | |
19 | + self.public_or_owned_by_user | |
20 | + end | |
21 | + | |
22 | + def attributes | |
23 | + @attributes ||= ReadingGroupAttributes.find_by(reading_group_id: self.id) | |
24 | + end | |
25 | + | |
26 | + def destroy | |
27 | + attributes.destroy unless attributes.nil? | |
28 | + @attributes = nil | |
29 | + super | |
30 | + end | |
3 | 31 | end | ... | ... |
... | ... | @@ -0,0 +1,13 @@ |
1 | +class ReadingGroupAttributes < ActiveRecord::Base | |
2 | + belongs_to :user | |
3 | + validates :reading_group_id, presence: true | |
4 | + | |
5 | + def reading_group | |
6 | + @reading_group ||= ReadingGroup.find(reading_group_id) | |
7 | + end | |
8 | + | |
9 | + def reading_group=(group) | |
10 | + @reading_group = group | |
11 | + self.reading_group_id = group.id | |
12 | + end | |
13 | +end | ... | ... |
app/models/reading_group_ownership.rb
app/models/user.rb
... | ... | @@ -9,8 +9,8 @@ class User < ActiveRecord::Base |
9 | 9 | validates :email, uniqueness: true |
10 | 10 | |
11 | 11 | has_many :project_attributes, class_name: 'ProjectAttributes' |
12 | - has_many :reading_group_ownerships | |
13 | - has_many :kalibro_configuration_ownerships | |
12 | + has_many :reading_group_attributes, class_name: 'ReadingGroupAttributes' | |
13 | + has_many :kalibro_configuration_attributes, class_name: 'KalibroConfigurationAttributes' | |
14 | 14 | # Alert: when adding new parameters to this model, they should also be added to registrations_controller |
15 | 15 | |
16 | 16 | def projects | ... | ... |
app/views/kalibro_configurations/_form.html.erb
app/views/reading_groups/_form.html.erb
app/views/repositories/_form.html.erb
... | ... | @@ -79,8 +79,7 @@ |
79 | 79 | <div class="form-row"> |
80 | 80 | <div class="field-container"> |
81 | 81 | <%= f.label :kalibro_configuration_id, KalibroConfiguration.model_name.human, class: 'control-label' %> |
82 | - <% configuration_list = KalibroClient::Entities::Configurations::KalibroConfiguration.all.map { |conf| [conf.name, conf.id] } %> | |
83 | - <%= f.select( :kalibro_configuration_id, configuration_list, class: 'tooltip-control' ) %> | |
82 | + <%= f.select( :kalibro_configuration_id, @configurations, class: 'tooltip-control' ) %> | |
84 | 83 | </div> |
85 | 84 | <div class="help-container"> |
86 | 85 | <p> | ... | ... |
db/migrate/20140124124835_create_mezuro_configuration_ownerships.rb
1 | -class CreateKalibroConfigurationOwnerships < ActiveRecord::Migration | |
1 | +class CreateMezuroConfigurationOwnerships < ActiveRecord::Migration | |
2 | 2 | def change |
3 | - create_table :kalibro_configuration_ownerships do |t| | |
3 | + create_table :mezuro_configuration_ownerships do |t| | |
4 | 4 | t.integer :user_id |
5 | - t.integer :kalibro_configuration_id | |
5 | + t.integer :mezuro_configuration_id | |
6 | 6 | |
7 | 7 | t.timestamps |
8 | 8 | end | ... | ... |
db/migrate/20150511180712_rename_kalibro_configuration_ownerships_to_kalibro_confiugration_attributes.rb
0 → 100644
... | ... | @@ -0,0 +1,6 @@ |
1 | +class RenameKalibroConfigurationOwnershipsToKalibroConfiugrationAttributes < ActiveRecord::Migration | |
2 | + def change | |
3 | + rename_table :kalibro_configuration_ownerships, :kalibro_configuration_attributes | |
4 | + add_column :kalibro_configuration_attributes, :public, :boolean, default: false | |
5 | + end | |
6 | +end | ... | ... |
db/migrate/20150511181035_rename_reading_group_ownerships_to_reading_group_attributes.rb
0 → 100644
db/migrate/20150515193445_change_kalibro_configuration_attributes_public_default.rb
0 → 100644
... | ... | @@ -0,0 +1,9 @@ |
1 | +class ChangeKalibroConfigurationAttributesPublicDefault < ActiveRecord::Migration | |
2 | + def up | |
3 | + change_column_default :kalibro_configuration_attributes, :public, true | |
4 | + end | |
5 | + | |
6 | + def down | |
7 | + change_column_default :kalibro_configuration_attributes, :public, false | |
8 | + end | |
9 | +end | ... | ... |
db/migrate/20150515195059_change_reading_group_attributes_public_default.rb
0 → 100644
db/schema.rb
... | ... | @@ -11,13 +11,14 @@ |
11 | 11 | # |
12 | 12 | # It's strongly recommended that you check this file into your version control system. |
13 | 13 | |
14 | -ActiveRecord::Schema.define(version: 20150225170704) do | |
14 | +ActiveRecord::Schema.define(version: 20150515195059) do | |
15 | 15 | |
16 | - create_table "kalibro_configuration_ownerships", force: :cascade do |t| | |
16 | + create_table "kalibro_configuration_attributes", force: :cascade do |t| | |
17 | 17 | t.integer "user_id" |
18 | 18 | t.integer "kalibro_configuration_id" |
19 | 19 | t.datetime "created_at" |
20 | 20 | t.datetime "updated_at" |
21 | + t.boolean "public", default: true | |
21 | 22 | end |
22 | 23 | |
23 | 24 | create_table "project_attributes", force: :cascade do |t| |
... | ... | @@ -29,11 +30,12 @@ ActiveRecord::Schema.define(version: 20150225170704) do |
29 | 30 | t.datetime "updated_at", null: false |
30 | 31 | end |
31 | 32 | |
32 | - create_table "reading_group_ownerships", force: :cascade do |t| | |
33 | + create_table "reading_group_attributes", force: :cascade do |t| | |
33 | 34 | t.integer "user_id" |
34 | 35 | t.integer "reading_group_id" |
35 | 36 | t.datetime "created_at" |
36 | 37 | t.datetime "updated_at" |
38 | + t.boolean "public", default: true | |
37 | 39 | end |
38 | 40 | |
39 | 41 | create_table "users", force: :cascade do |t| | ... | ... |
features/kalibro_configuration/listing.feature
... | ... | @@ -27,4 +27,16 @@ Feature: Configuration listing |
27 | 27 | And I have a sample configuration |
28 | 28 | And I am at the All Configurations page |
29 | 29 | When I click the Show link |
30 | - Then the sample configuration should be there | |
31 | 30 | \ No newline at end of file |
31 | + Then the sample configuration should be there | |
32 | + | |
33 | + @kalibro_configuration_restart | |
34 | + Scenario: Should show only the public or owned configurations | |
35 | + Given I am a regular user | |
36 | + And I am signed in | |
37 | + And I have a sample configuration | |
38 | + And there is a public configuration created | |
39 | + And there is a private configuration created | |
40 | + When I am at the All Configurations page | |
41 | + Then the sample configuration should be there | |
42 | + And the public configuration should be there | |
43 | + And the private configuration should not be there | ... | ... |
... | ... | @@ -0,0 +1,33 @@ |
1 | +Feature: Reading Group | |
2 | + In Order to be see the reading groups | |
3 | + As a regular user | |
4 | + I should be able to see the public and my own reading groups | |
5 | + | |
6 | + Scenario: Not logged in and no Reading Groups | |
7 | + Given I am at the homepage | |
8 | + When I click the Reading Group link | |
9 | + Then I should see "Reading Groups" | |
10 | + And I should see "Name" | |
11 | + And I should see "Description" | |
12 | + And I should see "You must be logged in to Create Reading Group" | |
13 | + | |
14 | + @kalibro_configuration_restart @javascript | |
15 | + Scenario: Logged in, should list Reading Groups | |
16 | + Given I am a regular user | |
17 | + And I am signed in | |
18 | + And I own a sample reading group | |
19 | + When I am at the All Reading Groups page | |
20 | + Then the sample reading group should be there | |
21 | + And I should not see "You must be logged in to Create Reading Group" | |
22 | + | |
23 | + @kalibro_configuration_restart | |
24 | + Scenario: Should show only the public or owned reading groups | |
25 | + Given I am a regular user | |
26 | + And I am signed in | |
27 | + And I own a sample reading group | |
28 | + And there is a public reading group created | |
29 | + And there is a private reading group created | |
30 | + When I am at the All Reading Groups page | |
31 | + Then the sample reading group should be there | |
32 | + And the public reading group should be there | |
33 | + And the private reading group should not be there | ... | ... |
features/step_definitions/kalibro_configuration_steps.rb
... | ... | @@ -12,11 +12,13 @@ end |
12 | 12 | |
13 | 13 | Given(/^I have a sample configuration$/) do |
14 | 14 | @kalibro_configuration = FactoryGirl.create(:kalibro_configuration) |
15 | + FactoryGirl.create(:kalibro_configuration_attributes, user_id: FactoryGirl.create(:another_user).id, kalibro_configuration_id: @kalibro_configuration.id) | |
16 | + | |
15 | 17 | end |
16 | 18 | |
17 | 19 | Given(/^I own a sample configuration$/) do |
18 | 20 | @kalibro_configuration = FactoryGirl.create(:kalibro_configuration) |
19 | - FactoryGirl.create(:kalibro_configuration_ownership, {id: nil, user_id: @user.id, kalibro_configuration_id: @kalibro_configuration.id}) | |
21 | + FactoryGirl.create(:kalibro_configuration_attributes, {id: nil, user_id: @user.id, kalibro_configuration_id: @kalibro_configuration.id}) | |
20 | 22 | end |
21 | 23 | |
22 | 24 | Given(/^I am at the Sample Configuration page$/) do |
... | ... | @@ -29,7 +31,7 @@ end |
29 | 31 | |
30 | 32 | Given(/^I own a configuration named "(.*?)"$/) do |name| |
31 | 33 | @kalibro_configuration = FactoryGirl.create(:kalibro_configuration, {name: name}) |
32 | - FactoryGirl.create(:kalibro_configuration_ownership, {id: nil, user_id: @user.id, kalibro_configuration_id: @kalibro_configuration.id}) | |
34 | + FactoryGirl.create(:kalibro_configuration_attributes, {id: nil, user_id: @user.id, kalibro_configuration_id: @kalibro_configuration.id}) | |
33 | 35 | end |
34 | 36 | |
35 | 37 | When(/^I visit the sample configuration edit page$/) do |
... | ... | @@ -49,6 +51,7 @@ Then(/^I should be in the All configurations page$/) do |
49 | 51 | end |
50 | 52 | |
51 | 53 | Then(/^the sample configuration should not be there$/) do |
54 | + expect(@kalibro_configuration.attributes).to be_nil | |
52 | 55 | expect { KalibroConfiguration.find(@kalibro_configuration.id) }.to raise_error |
53 | 56 | end |
54 | 57 | |
... | ... | @@ -56,3 +59,24 @@ Then(/^the sample configuration should be there$/) do |
56 | 59 | expect(page).to have_content(@kalibro_configuration.name) |
57 | 60 | expect(page).to have_content(@kalibro_configuration.description) |
58 | 61 | end |
62 | + | |
63 | +Given(/^there is a public configuration created$/) do | |
64 | + @public_kc = FactoryGirl.create(:public_kalibro_configuration) | |
65 | + FactoryGirl.create(:kalibro_configuration_attributes, kalibro_configuration_id: @public_kc.id) | |
66 | +end | |
67 | + | |
68 | +Given(/^there is a private configuration created$/) do | |
69 | + @private_kc = FactoryGirl.create(:another_kalibro_configuration) | |
70 | + FactoryGirl.create(:kalibro_configuration_attributes, :private, kalibro_configuration_id: @private_kc.id, user: FactoryGirl.create(:another_user, id: nil, email: "private@email.com")) | |
71 | +end | |
72 | + | |
73 | +Then(/^the public configuration should be there$/) do | |
74 | + expect(page).to have_content(@public_kc.name) | |
75 | + expect(page).to have_content(@public_kc.description) | |
76 | +end | |
77 | + | |
78 | +Then(/^the private configuration should not be there$/) do | |
79 | + expect(page).to have_no_content(@private_kc.name) | |
80 | + expect(page).to have_no_content(@private_kc.description) | |
81 | +end | |
82 | + | ... | ... |
features/step_definitions/reading_group_steps.rb
... | ... | @@ -14,7 +14,7 @@ end |
14 | 14 | |
15 | 15 | Given(/^I own a sample reading group$/) do |
16 | 16 | @reading_group = FactoryGirl.create(:reading_group) |
17 | - FactoryGirl.create(:reading_group_ownership, {user_id: @user.id, reading_group_id: @reading_group.id}) | |
17 | + FactoryGirl.create(:reading_group_attributes, user_id: @user.id, reading_group_id: @reading_group.id) | |
18 | 18 | end |
19 | 19 | |
20 | 20 | Given(/^I have a sample reading group$/) do |
... | ... | @@ -31,7 +31,7 @@ end |
31 | 31 | |
32 | 32 | Given(/^I own a reading group named "(.*?)"$/) do |name| |
33 | 33 | @reading_group = FactoryGirl.create(:reading_group, {name: name}) |
34 | - FactoryGirl.create(:reading_group_ownership, {user_id: @user.id, reading_group_id: @reading_group.id}) | |
34 | + FactoryGirl.create(:reading_group_attributes, {user_id: @user.id, reading_group_id: @reading_group.id}) | |
35 | 35 | end |
36 | 36 | |
37 | 37 | When(/^I visit the sample reading group edit page$/) do |
... | ... | @@ -61,5 +61,31 @@ Then(/^I should be in the Edit Reading Group page$/) do |
61 | 61 | end |
62 | 62 | |
63 | 63 | Then(/^the Sample Reading Group should not be there$/) do |
64 | + expect(@reading_group.attributes).to be_nil | |
64 | 65 | expect { ReadingGroup.find(@reading_group.id) }.to raise_error |
65 | 66 | end |
67 | + | |
68 | +Then(/^the sample reading group should be there$/) do | |
69 | + expect(page).to have_content(@reading_group.name) | |
70 | + expect(page).to have_content(@reading_group.description) | |
71 | +end | |
72 | + | |
73 | +Given(/^there is a public reading group created$/) do | |
74 | + @public_rg = FactoryGirl.create(:public_reading_group) | |
75 | + FactoryGirl.create(:reading_group_attributes, reading_group_id: @public_rg.id) | |
76 | +end | |
77 | + | |
78 | +Given(/^there is a private reading group created$/) do | |
79 | + @private_rg = FactoryGirl.create(:another_reading_group) | |
80 | + FactoryGirl.create(:reading_group_attributes, :private, reading_group_id: @private_rg.id, user: FactoryGirl.create(:another_user)) | |
81 | +end | |
82 | + | |
83 | +Then(/^the public reading group should be there$/) do | |
84 | + expect(page).to have_content(@public_rg.name) | |
85 | + expect(page).to have_content(@public_rg.description) | |
86 | +end | |
87 | + | |
88 | +Then(/^the private reading group should not be there$/) do | |
89 | + expect(page).to have_no_content(@private_rg.name) | |
90 | + expect(page).to have_no_content(@private_rg.description) | |
91 | +end | ... | ... |
features/step_definitions/repository_steps.rb
... | ... | @@ -13,6 +13,8 @@ Given(/^I have a sample configuration with native metrics$/) do |
13 | 13 | reading = FactoryGirl.create(:reading, {reading_group_id: reading_group.id}) |
14 | 14 | |
15 | 15 | @kalibro_configuration = FactoryGirl.create(:kalibro_configuration) |
16 | + FactoryGirl.create(:kalibro_configuration_attributes, {id: nil, user_id: nil, kalibro_configuration_id: @kalibro_configuration.id}) | |
17 | + | |
16 | 18 | metric_configuration = FactoryGirl.create(:metric_configuration, |
17 | 19 | {metric: FactoryGirl.build(:loc), |
18 | 20 | reading_group_id: reading_group.id, | ... | ... |
spec/controllers/base_metric_configurations_controller_spec.rb
... | ... | @@ -41,7 +41,7 @@ end |
41 | 41 | |
42 | 42 | |
43 | 43 | describe InheritsFromBaseMetricConfigurationsController, :type => :controller do |
44 | - let(:kalibro_configuration) { FactoryGirl.build(:kalibro_configuration_with_id) } | |
44 | + let(:kalibro_configuration) { FactoryGirl.build(:kalibro_configuration, :with_id) } | |
45 | 45 | |
46 | 46 | before do |
47 | 47 | Rails.application.routes.draw do |
... | ... | @@ -111,7 +111,7 @@ describe InheritsFromBaseMetricConfigurationsController, :type => :controller do |
111 | 111 | |
112 | 112 | describe 'show' do |
113 | 113 | let(:metric_configuration) { FactoryGirl.build(:metric_configuration_with_id) } |
114 | - let(:reading_group) { FactoryGirl.build(:reading_group_with_id) } | |
114 | + let(:reading_group) { FactoryGirl.build(:reading_group, :with_id) } | |
115 | 115 | let(:kalibro_range) { FactoryGirl.build(:kalibro_range) } |
116 | 116 | |
117 | 117 | context 'with a valid metric_configuration' do | ... | ... |
spec/controllers/compound_metric_configurations_controller_spec.rb
1 | 1 | require 'rails_helper' |
2 | 2 | |
3 | 3 | describe CompoundMetricConfigurationsController, :type => :controller do |
4 | - let(:kalibro_configuration) { FactoryGirl.build(:kalibro_configuration_with_id) } | |
4 | + let(:kalibro_configuration) { FactoryGirl.build(:kalibro_configuration, :with_id) } | |
5 | 5 | |
6 | 6 | describe 'new' do |
7 | 7 | before :each do |
... | ... | @@ -69,7 +69,7 @@ describe CompoundMetricConfigurationsController, :type => :controller do |
69 | 69 | |
70 | 70 | describe 'show' do |
71 | 71 | let(:compound_metric_configuration) { FactoryGirl.build(:compound_metric_configuration_with_id) } |
72 | - let(:reading_group) { FactoryGirl.build(:reading_group_with_id) } | |
72 | + let(:reading_group) { FactoryGirl.build(:reading_group, :with_id) } | |
73 | 73 | let(:kalibro_range) { FactoryGirl.build(:kalibro_range) } |
74 | 74 | |
75 | 75 | before :each do | ... | ... |
spec/controllers/concerns/ownership_authentication_spec.rb
... | ... | @@ -4,7 +4,7 @@ describe OwnershipAuthentication, type: :controller do |
4 | 4 | #TODO: test other methods |
5 | 5 | |
6 | 6 | describe 'reading_group_owner?' do |
7 | - let(:reading_group) { FactoryGirl.build(:reading_group_with_id) } | |
7 | + let(:reading_group) { FactoryGirl.build(:reading_group, :with_id) } | |
8 | 8 | |
9 | 9 | context 'Not ReadingGroupsController nor ReadingsController' do |
10 | 10 | let!(:projects_controller) { ProjectsController.new } |
... | ... | @@ -34,12 +34,12 @@ describe OwnershipAuthentication, type: :controller do |
34 | 34 | end |
35 | 35 | |
36 | 36 | context 'when the user owns the ReadingGroup' do |
37 | - let!(:reading_group_ownership) { FactoryGirl.build(:reading_group_ownership, {user_id: current_user.id, reading_group_id: reading_group.id}) } | |
37 | + let!(:reading_group_attributes) { FactoryGirl.build(:reading_group_attributes, {user_id: current_user.id, reading_group_id: reading_group.id}) } | |
38 | 38 | |
39 | 39 | before do |
40 | - reading_group_ownerships = Object.new | |
41 | - reading_group_ownerships.expects(:find_by_reading_group_id).with(reading_group.id).returns(reading_group_ownership) | |
42 | - current_user.expects(:reading_group_ownerships).returns(reading_group_ownerships) | |
40 | + reading_group_attributes = Object.new | |
41 | + reading_group_attributes.expects(:find_by_reading_group_id).with(reading_group.id).returns(reading_group_attributes) | |
42 | + current_user.expects(:reading_group_attributes).returns(reading_group_attributes) | |
43 | 43 | end |
44 | 44 | |
45 | 45 | it 'should return true' do |
... | ... | @@ -49,9 +49,9 @@ describe OwnershipAuthentication, type: :controller do |
49 | 49 | |
50 | 50 | context 'when the user does not own the ReadingGroup' do |
51 | 51 | before do |
52 | - reading_group_ownerships = Object.new | |
53 | - reading_group_ownerships.expects(:find_by_reading_group_id).with(reading_group.id).returns(nil) | |
54 | - current_user.expects(:reading_group_ownerships).returns(reading_group_ownerships) | |
52 | + reading_group_attributes = Object.new | |
53 | + reading_group_attributes.expects(:find_by_reading_group_id).with(reading_group.id).returns(nil) | |
54 | + current_user.expects(:reading_group_attributes).returns(reading_group_attributes) | |
55 | 55 | end |
56 | 56 | |
57 | 57 | it 'should respond' do # FIXME: this is not the best test, but it it's the closest we can do I think |
... | ... | @@ -65,7 +65,7 @@ describe OwnershipAuthentication, type: :controller do |
65 | 65 | end |
66 | 66 | |
67 | 67 | describe 'kalibro_configuration_owner?' do |
68 | - let(:kalibro_configuration) { FactoryGirl.build(:kalibro_configuration_with_id) } | |
68 | + let(:kalibro_configuration) { FactoryGirl.build(:kalibro_configuration, :with_id) } | |
69 | 69 | |
70 | 70 | context 'Not KalibroConfigurationsController nor MetricConfigurationsController nor CompoundMetricConfigurationsController' do |
71 | 71 | let!(:projects_controller) { ProjectsController.new } | ... | ... |
spec/controllers/kalibro_configurations_controller_spec.rb
... | ... | @@ -2,6 +2,14 @@ require 'rails_helper' |
2 | 2 | |
3 | 3 | describe KalibroConfigurationsController, :type => :controller do |
4 | 4 | |
5 | + def call_action(method) | |
6 | + if method == :update | |
7 | + post method, :id => kalibro_configuration.id, :kalibro_configuration => kalibro_configuration_params, :attributes => attributes | |
8 | + elsif method == :create | |
9 | + put method, :kalibro_configuration => kalibro_configuration_params, :attributes => attributes | |
10 | + end | |
11 | + end | |
12 | + | |
5 | 13 | describe 'new' do |
6 | 14 | before :each do |
7 | 15 | sign_in FactoryGirl.create(:user) |
... | ... | @@ -18,16 +26,17 @@ describe KalibroConfigurationsController, :type => :controller do |
18 | 26 | end |
19 | 27 | |
20 | 28 | context 'with valid fields' do |
21 | - let(:kalibro_configuration) { FactoryGirl.build(:kalibro_configuration_with_id) } | |
22 | - let(:subject_params) { kalibro_configuration.to_hash } | |
29 | + let(:kalibro_configuration) { FactoryGirl.build(:kalibro_configuration, :with_id) } | |
30 | + let(:kalibro_configuration_params) { kalibro_configuration.to_hash } | |
31 | + let(:attributes) { {public: "1"} } | |
23 | 32 | |
24 | - before :each do | |
33 | + before :each do | |
25 | 34 | KalibroConfiguration.any_instance.expects(:save).returns(true) |
26 | 35 | end |
27 | 36 | |
28 | 37 | context 'rendering the show' do |
29 | 38 | before :each do |
30 | - post :create, :kalibro_configuration => subject_params | |
39 | + call_action :create | |
31 | 40 | end |
32 | 41 | |
33 | 42 | it 'should redirect to the show view' do |
... | ... | @@ -37,7 +46,7 @@ describe KalibroConfigurationsController, :type => :controller do |
37 | 46 | |
38 | 47 | context 'without rendering the show view' do |
39 | 48 | before :each do |
40 | - post :create, :kalibro_configuration => subject_params | |
49 | + call_action :create | |
41 | 50 | end |
42 | 51 | |
43 | 52 | it { is_expected.to respond_with(:redirect) } |
... | ... | @@ -46,7 +55,7 @@ describe KalibroConfigurationsController, :type => :controller do |
46 | 55 | |
47 | 56 | context 'with an invalid field' do |
48 | 57 | before :each do |
49 | - @subject = FactoryGirl.build(:kalibro_configuration_with_id) | |
58 | + @subject = FactoryGirl.build(:kalibro_configuration, :with_id) | |
50 | 59 | @subject_params = @subject.to_hash |
51 | 60 | |
52 | 61 | KalibroConfiguration.expects(:new).at_least_once.with(@subject_params).returns(@subject) |
... | ... | @@ -60,8 +69,8 @@ describe KalibroConfigurationsController, :type => :controller do |
60 | 69 | end |
61 | 70 | |
62 | 71 | describe 'show' do |
63 | - let(:kalibro_configuration) { FactoryGirl.build(:kalibro_configuration_with_id) } | |
64 | - let(:metric_configuration) { FactoryGirl.build(:metric_configuration_with_id) } | |
72 | + let(:kalibro_configuration) { FactoryGirl.build(:kalibro_configuration, :with_id) } | |
73 | + let(:metric_configuration) { FactoryGirl.build(:metric_configuration_with_id) } | |
65 | 74 | |
66 | 75 | before :each do |
67 | 76 | kalibro_configuration.expects(:metric_configurations).returns(metric_configuration) |
... | ... | @@ -78,30 +87,22 @@ describe KalibroConfigurationsController, :type => :controller do |
78 | 87 | end |
79 | 88 | |
80 | 89 | describe 'destroy' do |
81 | - before do | |
82 | - @subject = FactoryGirl.build(:kalibro_configuration_with_id) | |
83 | - end | |
90 | + let(:kalibro_configuration) { FactoryGirl.build(:kalibro_configuration, :with_id) } | |
84 | 91 | |
85 | 92 | context 'with an User logged in' do |
93 | + let(:kalibro_configuration_attribute) { FactoryGirl.build(:kalibro_configuration_attributes) } | |
94 | + | |
86 | 95 | before do |
87 | 96 | sign_in FactoryGirl.create(:user) |
88 | - @ownership = FactoryGirl.build(:kalibro_configuration_ownership) | |
89 | - @ownerships = [] | |
90 | 97 | end |
91 | 98 | |
92 | 99 | context 'when the user owns the kalibro_configuration' do |
93 | 100 | before :each do |
94 | - @ownership.expects(:destroy) | |
95 | - @subject.expects(:destroy) | |
96 | - | |
97 | - #Those two mocks looks the same but they are necessary since params[:id] is a String and @configuration.id is an Integer :( | |
98 | - @ownerships.expects(:find_by_kalibro_configuration_id).with("#{@subject.id}").returns(@ownership) | |
99 | - @ownerships.expects(:find_by_kalibro_configuration_id!).with(@subject.id).returns(@ownership) | |
101 | + kalibro_configuration.expects(:destroy) | |
102 | + KalibroConfiguration.expects(:find).with(kalibro_configuration.id).returns(kalibro_configuration) | |
103 | + subject.expects(:kalibro_configuration_owner?) | |
100 | 104 | |
101 | - User.any_instance.expects(:kalibro_configuration_ownerships).at_least_once.returns(@ownerships) | |
102 | - | |
103 | - KalibroConfiguration.expects(:find).with(@subject.id).returns(@subject) | |
104 | - delete :destroy, :id => @subject.id | |
105 | + delete :destroy, :id => kalibro_configuration.id | |
105 | 106 | end |
106 | 107 | |
107 | 108 | it 'should redirect to the kalibro_configurations page' do |
... | ... | @@ -113,19 +114,16 @@ describe KalibroConfigurationsController, :type => :controller do |
113 | 114 | |
114 | 115 | context "when the user doesn't own the kalibro_configuration" do |
115 | 116 | before :each do |
116 | - @ownerships.expects(:find_by_kalibro_configuration_id).with("#{@subject.id}").returns(nil) | |
117 | - User.any_instance.expects(:kalibro_configuration_ownerships).at_least_once.returns(@ownerships) | |
118 | - | |
119 | - delete :destroy, :id => @subject.id | |
117 | + delete :destroy, :id => kalibro_configuration.id | |
120 | 118 | end |
121 | 119 | |
122 | - it { is_expected.to redirect_to(kalibro_configurations_path(id: @subject.id)) } | |
120 | + it { is_expected.to redirect_to(kalibro_configurations_path(id: kalibro_configuration.id)) } | |
123 | 121 | end |
124 | 122 | end |
125 | 123 | |
126 | 124 | context 'with no User logged in' do |
127 | 125 | before :each do |
128 | - delete :destroy, :id => @subject.id | |
126 | + delete :destroy, :id => kalibro_configuration.id | |
129 | 127 | end |
130 | 128 | |
131 | 129 | it { is_expected.to redirect_to new_user_session_path } |
... | ... | @@ -133,9 +131,11 @@ describe KalibroConfigurationsController, :type => :controller do |
133 | 131 | end |
134 | 132 | |
135 | 133 | describe 'index' do |
134 | + let!(:kalibro_configuration_attribute) { FactoryGirl.build(:kalibro_configuration_attributes) } | |
136 | 135 | before :each do |
137 | - @subject = FactoryGirl.build(:kalibro_configuration_with_id) | |
138 | - KalibroConfiguration.expects(:all).returns([@subject]) | |
136 | + @subject = FactoryGirl.build(:kalibro_configuration, :with_id) | |
137 | + KalibroConfigurationAttributes.expects(:where).with(public: true).returns([kalibro_configuration_attribute]) | |
138 | + KalibroConfiguration.expects(:find).with(kalibro_configuration_attribute.kalibro_configuration_id).returns(@subject) | |
139 | 139 | get :index |
140 | 140 | end |
141 | 141 | |
... | ... | @@ -143,52 +143,50 @@ describe KalibroConfigurationsController, :type => :controller do |
143 | 143 | end |
144 | 144 | |
145 | 145 | describe 'edit' do |
146 | - before do | |
147 | - @subject = FactoryGirl.build(:kalibro_configuration_with_id) | |
148 | - end | |
146 | + let!(:user) { FactoryGirl.create(:user) } | |
147 | + let(:kalibro_configuration) { FactoryGirl.build(:kalibro_configuration, :with_id) } | |
148 | + let(:kalibro_configuration_attribute) { FactoryGirl.build(:kalibro_configuration_attributes) } | |
149 | + let(:kalibro_configuration_attributes) { mock('kalibro_configuration_attributes') } | |
149 | 150 | |
150 | 151 | context 'with an User logged in' do |
151 | 152 | before do |
152 | - @user = FactoryGirl.create(:user) | |
153 | - @ownership = FactoryGirl.build(:kalibro_configuration_ownership) | |
154 | - @ownerships = [] | |
153 | + User.any_instance.expects(:kalibro_configuration_attributes).at_least_once.returns(kalibro_configuration_attributes) | |
155 | 154 | |
156 | - User.any_instance.expects(:kalibro_configuration_ownerships).at_least_once.returns(@ownerships) | |
157 | - | |
158 | - sign_in @user | |
155 | + sign_in user | |
159 | 156 | end |
160 | 157 | |
161 | 158 | context 'when the user owns the kalibro_configuration' do |
162 | 159 | before :each do |
163 | - KalibroConfiguration.expects(:find).with(@subject.id).returns(@subject) | |
164 | - @ownerships.expects(:find_by_kalibro_configuration_id).with("#{@subject.id}").returns(@ownership) | |
160 | + KalibroConfiguration.expects(:find).with(kalibro_configuration.id).returns(kalibro_configuration) | |
161 | + kalibro_configuration_attributes.expects(:find_by_kalibro_configuration_id).with("#{kalibro_configuration.id}").returns(kalibro_configuration_attribute) | |
165 | 162 | |
166 | - get :edit, :id => @subject.id | |
163 | + get :edit, :id => kalibro_configuration.id | |
167 | 164 | end |
168 | 165 | |
169 | 166 | it { is_expected.to render_template(:edit) } |
170 | 167 | |
171 | - it 'should assign to @kalibro_configuration the @subject' do | |
172 | - expect(assigns(:kalibro_configuration)).to eq(@subject) | |
168 | + it 'should assign to @kalibro_configuration the kalibro_configuration' do | |
169 | + expect(assigns(:kalibro_configuration)).to eq(kalibro_configuration) | |
173 | 170 | end |
174 | 171 | end |
175 | 172 | |
176 | 173 | context 'when the user does not own the kalibro_configuration' do |
177 | - before do | |
178 | - @subject = FactoryGirl.build(:another_kalibro_configuration_with_id) | |
179 | - @ownerships.expects(:find_by_kalibro_configuration_id).with("#{@subject.id}").returns(nil) | |
174 | + let!(:another_kalibro_configuration) { FactoryGirl.build(:another_kalibro_configuration, :with_id) } | |
175 | + | |
176 | + before :each do | |
177 | + kalibro_configuration_attributes.expects(:find_by_kalibro_configuration_id).with("#{another_kalibro_configuration.id}").returns(nil) | |
180 | 178 | |
181 | - get :edit, :id => @subject.id | |
179 | + get :edit, :id => another_kalibro_configuration.id | |
182 | 180 | end |
183 | 181 | |
184 | - it { is_expected.to redirect_to(kalibro_configurations_path(id: @subject.id)) } | |
182 | + it { is_expected.to redirect_to(kalibro_configurations_path(id: another_kalibro_configuration.id)) } | |
185 | 183 | it { is_expected.to set_flash[:notice].to("You're not allowed to do this operation") } |
186 | 184 | end |
187 | 185 | end |
188 | 186 | |
189 | 187 | context 'with no user logged in' do |
190 | 188 | before :each do |
191 | - get :edit, :id => @subject.id | |
189 | + get :edit, :id => kalibro_configuration.id | |
192 | 190 | end |
193 | 191 | |
194 | 192 | it { is_expected.to redirect_to new_user_session_path } |
... | ... | @@ -196,8 +194,9 @@ describe KalibroConfigurationsController, :type => :controller do |
196 | 194 | end |
197 | 195 | |
198 | 196 | describe 'update' do |
199 | - let(:kalibro_configuration) {FactoryGirl.build(:kalibro_configuration_with_id)} | |
200 | - let(:kalibro_configuration_params) { kalibro_configuration.to_hash } | |
197 | + let!(:kalibro_configuration) {FactoryGirl.build(:kalibro_configuration, :with_id)} | |
198 | + let!(:kalibro_configuration_params) { kalibro_configuration.to_hash } | |
199 | + let!(:attributes) { {public: "1"} } | |
201 | 200 | |
202 | 201 | context 'when the user is logged in' do |
203 | 202 | before do |
... | ... | @@ -205,12 +204,12 @@ describe KalibroConfigurationsController, :type => :controller do |
205 | 204 | end |
206 | 205 | |
207 | 206 | context 'when user owns the kalibro_configuration' do |
208 | - before do | |
209 | - @ownership = FactoryGirl.build(:kalibro_configuration_ownership) | |
210 | - @ownerships = [] | |
207 | + let(:kalibro_configuration_attribute) { FactoryGirl.build(:kalibro_configuration_attributes) } | |
208 | + let(:kalibro_configuration_attributes) { mock('kalibro_configuration_attributes') } | |
211 | 209 | |
212 | - @ownerships.expects(:find_by_kalibro_configuration_id).with("#{kalibro_configuration.id}").returns(@ownership) | |
213 | - User.any_instance.expects(:kalibro_configuration_ownerships).at_least_once.returns(@ownerships) | |
210 | + before :each do | |
211 | + kalibro_configuration_attributes.expects(:find_by_kalibro_configuration_id).with("#{kalibro_configuration.id}").returns(kalibro_configuration_attribute) | |
212 | + User.any_instance.expects(:kalibro_configuration_attributes).at_least_once.returns(kalibro_configuration_attributes) | |
214 | 213 | end |
215 | 214 | |
216 | 215 | context 'with valid fields' do |
... | ... | @@ -221,7 +220,7 @@ describe KalibroConfigurationsController, :type => :controller do |
221 | 220 | |
222 | 221 | context 'rendering the show' do |
223 | 222 | before :each do |
224 | - post :update, :id => kalibro_configuration.id, :kalibro_configuration => kalibro_configuration_params | |
223 | + call_action :update | |
225 | 224 | end |
226 | 225 | |
227 | 226 | it 'should redirect to the show view' do |
... | ... | @@ -231,7 +230,7 @@ describe KalibroConfigurationsController, :type => :controller do |
231 | 230 | |
232 | 231 | context 'without rendering the show view' do |
233 | 232 | before :each do |
234 | - post :update, :id => kalibro_configuration.id, :kalibro_configuration => kalibro_configuration_params | |
233 | + call_action :update | |
235 | 234 | end |
236 | 235 | |
237 | 236 | it { is_expected.to respond_with(:redirect) } |
... | ... | @@ -243,7 +242,7 @@ describe KalibroConfigurationsController, :type => :controller do |
243 | 242 | KalibroConfiguration.expects(:find).with(kalibro_configuration.id).returns(kalibro_configuration) |
244 | 243 | KalibroConfiguration.any_instance.expects(:update).with(kalibro_configuration_params).returns(false) |
245 | 244 | |
246 | - post :update, :id => kalibro_configuration.id, :kalibro_configuration => kalibro_configuration_params | |
245 | + call_action :update | |
247 | 246 | end |
248 | 247 | |
249 | 248 | it { is_expected.to render_template(:edit) } |
... | ... | @@ -252,7 +251,7 @@ describe KalibroConfigurationsController, :type => :controller do |
252 | 251 | |
253 | 252 | context 'when the user does not own the kalibro_configuration' do |
254 | 253 | before :each do |
255 | - post :update, :id => kalibro_configuration.id, :kalibro_configuration => kalibro_configuration_params | |
254 | + call_action :update | |
256 | 255 | end |
257 | 256 | |
258 | 257 | it { is_expected.to redirect_to kalibro_configurations_path(id: kalibro_configuration.id) } |
... | ... | @@ -261,7 +260,7 @@ describe KalibroConfigurationsController, :type => :controller do |
261 | 260 | |
262 | 261 | context 'with no user logged in' do |
263 | 262 | before :each do |
264 | - post :update, :id => kalibro_configuration.id, :kalibro_configuration => kalibro_configuration_params | |
263 | + call_action :update | |
265 | 264 | end |
266 | 265 | |
267 | 266 | it { is_expected.to redirect_to new_user_session_path } | ... | ... |
spec/controllers/kalibro_ranges_controller_spec.rb
... | ... | @@ -5,7 +5,7 @@ describe KalibroRangesController, :type => :controller do |
5 | 5 | let(:kalibro_range) { FactoryGirl.build(:kalibro_range_with_id, metric_configuration_id: metric_configuration.id) } |
6 | 6 | |
7 | 7 | describe 'new' do |
8 | - let(:kalibro_configuration) { FactoryGirl.build(:kalibro_configuration_with_id) } | |
8 | + let(:kalibro_configuration) { FactoryGirl.build(:kalibro_configuration, :with_id) } | |
9 | 9 | |
10 | 10 | before :each do |
11 | 11 | sign_in FactoryGirl.create(:user) |
... | ... | @@ -35,7 +35,7 @@ describe KalibroRangesController, :type => :controller do |
35 | 35 | |
36 | 36 | describe 'create' do |
37 | 37 | let(:kalibro_range_params) { kalibro_range.to_hash } |
38 | - let(:kalibro_configuration) { FactoryGirl.build(:kalibro_configuration_with_id) } | |
38 | + let(:kalibro_configuration) { FactoryGirl.build(:kalibro_configuration, :with_id) } | |
39 | 39 | |
40 | 40 | before do |
41 | 41 | sign_in FactoryGirl.create(:user) | ... | ... |
spec/controllers/metric_configurations_controller_spec.rb
1 | 1 | require 'rails_helper' |
2 | 2 | |
3 | 3 | describe MetricConfigurationsController, :type => :controller do |
4 | - let(:kalibro_configuration) { FactoryGirl.build(:kalibro_configuration_with_id) } | |
4 | + let(:kalibro_configuration) { FactoryGirl.build(:kalibro_configuration, :with_id) } | |
5 | 5 | describe 'choose_metric' do |
6 | 6 | let(:metric_collector) { FactoryGirl.build(:metric_collector) } |
7 | 7 | before :each do |
... | ... | @@ -24,12 +24,16 @@ describe MetricConfigurationsController, :type => :controller do |
24 | 24 | describe 'new' do |
25 | 25 | let!(:metric_collector) { FactoryGirl.build(:metric_collector) } |
26 | 26 | let!(:native_metric) { FactoryGirl.build(:loc) } |
27 | + let!(:reading_groups) { [FactoryGirl.build(:reading_group)] } | |
28 | + let!(:user) { FactoryGirl.create(:user) } | |
29 | + | |
27 | 30 | before :each do |
28 | - sign_in FactoryGirl.create(:user) | |
31 | + sign_in user | |
29 | 32 | end |
30 | 33 | |
31 | 34 | context 'when the current user owns the kalibro configuration' do |
32 | 35 | before :each do |
36 | + ReadingGroup.expects(:public_or_owned_by_user).with(user).returns(reading_groups) | |
33 | 37 | subject.expects(:kalibro_configuration_owner?).returns true |
34 | 38 | KalibroClient::Entities::Processor::MetricCollectorDetails.expects(:find_by_name).with(metric_collector.name).returns(metric_collector) |
35 | 39 | metric_collector.expects(:find_metric_by_code).with(native_metric.code).returns(native_metric) |
... | ... | @@ -92,7 +96,7 @@ describe MetricConfigurationsController, :type => :controller do |
92 | 96 | |
93 | 97 | describe 'show' do |
94 | 98 | let(:metric_configuration) { FactoryGirl.build(:metric_configuration_with_id) } |
95 | - let(:reading_group) { FactoryGirl.build(:reading_group_with_id) } | |
99 | + let(:reading_group) { FactoryGirl.build(:reading_group, :with_id) } | |
96 | 100 | let(:kalibro_range) { FactoryGirl.build(:kalibro_range) } |
97 | 101 | |
98 | 102 | before :each do |
... | ... | @@ -108,14 +112,17 @@ describe MetricConfigurationsController, :type => :controller do |
108 | 112 | |
109 | 113 | describe 'edit' do |
110 | 114 | let(:metric_configuration) { FactoryGirl.build(:metric_configuration_with_id) } |
115 | + let!(:reading_groups) { [FactoryGirl.build(:reading_group)] } | |
116 | + let!(:user) { FactoryGirl.create(:user) } | |
111 | 117 | |
112 | 118 | context 'with a User logged in' do |
113 | 119 | before do |
114 | - sign_in FactoryGirl.create(:user) | |
120 | + sign_in user | |
115 | 121 | end |
116 | 122 | |
117 | 123 | context 'when the user owns the metric configuration' do |
118 | 124 | before :each do |
125 | + ReadingGroup.expects(:public_or_owned_by_user).with(user).returns(reading_groups) | |
119 | 126 | subject.expects(:metric_configuration_owner?).returns(true) |
120 | 127 | MetricConfiguration.expects(:find).with(metric_configuration.id).returns(metric_configuration) |
121 | 128 | get :edit, id: metric_configuration.id, kalibro_configuration_id: metric_configuration.kalibro_configuration_id.to_s | ... | ... |
spec/controllers/projects_controller_spec.rb
... | ... | @@ -97,14 +97,9 @@ describe ProjectsController, :type => :controller do |
97 | 97 | |
98 | 98 | context 'when the user owns the project' do |
99 | 99 | before :each do |
100 | - @project_attributes.expects(:destroy) | |
101 | 100 | @subject.expects(:destroy) |
102 | 101 | |
103 | - #Those two mocks looks the same but they are necessary since params[:id] is a String and @project.id is an Integer :( | |
104 | - @attributes.expects(:find_by_project_id).with("#{@subject.id}").returns(@project_attributes) | |
105 | - @attributes.expects(:find_by_project_id!).with(@subject.id).returns(@project_attributes) | |
106 | - | |
107 | - User.any_instance.expects(:project_attributes).at_least_once.returns(@attributes) | |
102 | + subject.expects(:project_owner?) | |
108 | 103 | |
109 | 104 | Project.expects(:find).with(@subject.id).returns(@subject) |
110 | 105 | delete :destroy, :id => @subject.id | ... | ... |
spec/controllers/reading_groups_controller_spec.rb
... | ... | @@ -12,12 +12,13 @@ describe ReadingGroupsController, :type => :controller do |
12 | 12 | end |
13 | 13 | |
14 | 14 | describe 'create' do |
15 | + let(:attributes) { {public: "1"} } | |
15 | 16 | before do |
16 | 17 | sign_in FactoryGirl.create(:user) |
17 | 18 | end |
18 | 19 | |
19 | 20 | context 'with valid fields' do |
20 | - let(:reading_group) { FactoryGirl.build(:reading_group_with_id) } | |
21 | + let(:reading_group) { FactoryGirl.build(:reading_group, :with_id) } | |
21 | 22 | let(:subject_params) { reading_group.to_hash } |
22 | 23 | |
23 | 24 | before :each do |
... | ... | @@ -26,7 +27,8 @@ describe ReadingGroupsController, :type => :controller do |
26 | 27 | |
27 | 28 | context 'rendering the show' do |
28 | 29 | before :each do |
29 | - post :create, :reading_group => subject_params | |
30 | + post :create, :reading_group => subject_params, :attributes => attributes | |
31 | + | |
30 | 32 | end |
31 | 33 | |
32 | 34 | it 'should redirect to the show view' do |
... | ... | @@ -36,7 +38,8 @@ describe ReadingGroupsController, :type => :controller do |
36 | 38 | |
37 | 39 | context 'without rendering the show view' do |
38 | 40 | before :each do |
39 | - post :create, :reading_group => subject_params | |
41 | + post :create, :reading_group => subject_params, :attributes => attributes | |
42 | + | |
40 | 43 | end |
41 | 44 | |
42 | 45 | it { is_expected.to respond_with(:redirect) } |
... | ... | @@ -45,13 +48,14 @@ describe ReadingGroupsController, :type => :controller do |
45 | 48 | |
46 | 49 | context 'with an invalid field' do |
47 | 50 | before :each do |
48 | - @subject = FactoryGirl.build(:reading_group_with_id) | |
51 | + @subject = FactoryGirl.build(:reading_group, :with_id) | |
49 | 52 | @subject_params = @subject.to_hash |
50 | 53 | |
51 | 54 | ReadingGroup.expects(:new).at_least_once.with(@subject_params).returns(@subject) |
52 | 55 | ReadingGroup.any_instance.expects(:save).returns(false) |
53 | 56 | |
54 | - post :create, :reading_group => @subject_params | |
57 | + post :create, :reading_group => @subject_params, :attributes => attributes | |
58 | + | |
55 | 59 | end |
56 | 60 | |
57 | 61 | it { is_expected.to render_template(:new) } |
... | ... | @@ -59,7 +63,7 @@ describe ReadingGroupsController, :type => :controller do |
59 | 63 | end |
60 | 64 | |
61 | 65 | describe 'show' do |
62 | - let!(:reading_group) { FactoryGirl.build(:reading_group_with_id) } | |
66 | + let!(:reading_group) { FactoryGirl.build(:reading_group, :with_id) } | |
63 | 67 | let(:reading) { FactoryGirl.build(:reading_with_id) } |
64 | 68 | before :each do |
65 | 69 | ReadingGroup.expects(:find).with(reading_group.id).returns(reading_group) |
... | ... | @@ -71,27 +75,20 @@ describe ReadingGroupsController, :type => :controller do |
71 | 75 | |
72 | 76 | describe 'destroy' do |
73 | 77 | before do |
74 | - @subject = FactoryGirl.build(:reading_group_with_id) | |
78 | + @subject = FactoryGirl.build(:reading_group, :with_id) | |
75 | 79 | end |
76 | 80 | |
77 | 81 | context 'with a User logged in' do |
78 | 82 | before do |
79 | 83 | sign_in FactoryGirl.create(:user) |
80 | - @ownership = FactoryGirl.build(:reading_group_ownership) | |
84 | + @ownership = FactoryGirl.build(:reading_group_attributes) | |
81 | 85 | @ownerships = [] |
82 | - | |
83 | 86 | end |
84 | 87 | |
85 | 88 | context 'when the user owns the reading group' do |
86 | 89 | before :each do |
87 | - @ownership.expects(:destroy) | |
88 | 90 | @subject.expects(:destroy) |
89 | - | |
90 | - #Those two mocks looks the same but they are necessary since params[:id] is a String and @ReadingGroup.id is an Integer :( | |
91 | - @ownerships.expects(:find_by_reading_group_id).with("#{@subject.id}").returns(@ownership) | |
92 | - @ownerships.expects(:find_by_reading_group_id!).with(@subject.id).returns(@ownership) | |
93 | - | |
94 | - User.any_instance.expects(:reading_group_ownerships).at_least_once.returns(@ownerships) | |
91 | + subject.expects(:reading_group_owner?) | |
95 | 92 | |
96 | 93 | ReadingGroup.expects(:find).with(@subject.id).returns(@subject) |
97 | 94 | delete :destroy, :id => @subject.id |
... | ... | @@ -107,7 +104,7 @@ describe ReadingGroupsController, :type => :controller do |
107 | 104 | context "when the user doesn't own the reading group" do |
108 | 105 | before :each do |
109 | 106 | @ownerships.expects(:find_by_reading_group_id).with("#{@subject.id}").returns(nil) |
110 | - User.any_instance.expects(:reading_group_ownerships).at_least_once.returns(@ownerships) | |
107 | + User.any_instance.expects(:reading_group_attributes).at_least_once.returns(@ownerships) | |
111 | 108 | |
112 | 109 | delete :destroy, :id => @subject.id |
113 | 110 | end |
... | ... | @@ -126,9 +123,11 @@ describe ReadingGroupsController, :type => :controller do |
126 | 123 | end |
127 | 124 | |
128 | 125 | describe 'index' do |
126 | + let!(:reading_group_attribute) { FactoryGirl.build(:reading_group_attributes) } | |
129 | 127 | before :each do |
130 | - @subject = FactoryGirl.build(:reading_group_with_id) | |
131 | - ReadingGroup.expects(:all).returns([@subject]) | |
128 | + @subject = FactoryGirl.build(:reading_group, :with_id) | |
129 | + ReadingGroupAttributes.expects(:where).with(public: true).returns([reading_group_attribute]) | |
130 | + ReadingGroup.expects(:find).with(reading_group_attribute.reading_group_id).returns([@subject]) | |
132 | 131 | get :index |
133 | 132 | end |
134 | 133 | |
... | ... | @@ -137,16 +136,16 @@ describe ReadingGroupsController, :type => :controller do |
137 | 136 | |
138 | 137 | describe 'edit' do |
139 | 138 | before do |
140 | - @subject = FactoryGirl.build(:reading_group_with_id) | |
139 | + @subject = FactoryGirl.build(:reading_group, :with_id) | |
141 | 140 | end |
142 | 141 | |
143 | 142 | context 'with a User logged in' do |
144 | 143 | before do |
145 | 144 | @user = FactoryGirl.create(:user) |
146 | - @ownership = FactoryGirl.build(:reading_group_ownership) | |
145 | + @ownership = FactoryGirl.build(:reading_group_attributes) | |
147 | 146 | @ownerships = [] |
148 | 147 | |
149 | - User.any_instance.expects(:reading_group_ownerships).at_least_once.returns(@ownerships) | |
148 | + User.any_instance.expects(:reading_group_attributes).at_least_once.returns(@ownerships) | |
150 | 149 | |
151 | 150 | sign_in @user |
152 | 151 | end |
... | ... | @@ -168,7 +167,7 @@ describe ReadingGroupsController, :type => :controller do |
168 | 167 | |
169 | 168 | context 'when the user does not own the reading group' do |
170 | 169 | before do |
171 | - @subject = FactoryGirl.build(:another_reading_group_with_id) | |
170 | + @subject = FactoryGirl.build(:another_reading_group, :with_id) | |
172 | 171 | @ownerships.expects(:find_by_reading_group_id).with("#{@subject.id}").returns(nil) |
173 | 172 | |
174 | 173 | get :edit, :id => @subject.id |
... | ... | @@ -190,8 +189,9 @@ describe ReadingGroupsController, :type => :controller do |
190 | 189 | |
191 | 190 | describe 'update' do |
192 | 191 | before do |
193 | - @subject = FactoryGirl.build(:reading_group_with_id) | |
192 | + @subject = FactoryGirl.build(:reading_group, :with_id) | |
194 | 193 | @subject_params = @subject.to_hash |
194 | + @ownership = FactoryGirl.build(:reading_group_attributes, reading_group_id: @subject.id) | |
195 | 195 | end |
196 | 196 | |
197 | 197 | context 'when the user is logged in' do |
... | ... | @@ -201,11 +201,10 @@ describe ReadingGroupsController, :type => :controller do |
201 | 201 | |
202 | 202 | context 'when user owns the reading group' do |
203 | 203 | before do |
204 | - @ownership = FactoryGirl.build(:reading_group_ownership) | |
205 | 204 | @ownerships = [] |
206 | 205 | |
207 | 206 | @ownerships.expects(:find_by_reading_group_id).with("#{@subject.id}").returns(@ownership) |
208 | - User.any_instance.expects(:reading_group_ownerships).at_least_once.returns(@ownerships) | |
207 | + User.any_instance.expects(:reading_group_attributes).at_least_once.returns(@ownerships) | |
209 | 208 | end |
210 | 209 | |
211 | 210 | context 'with valid fields' do |
... | ... | @@ -216,7 +215,7 @@ describe ReadingGroupsController, :type => :controller do |
216 | 215 | |
217 | 216 | context 'rendering the show' do |
218 | 217 | before :each do |
219 | - post :update, :id => @subject.id, :reading_group => @subject_params | |
218 | + post :update, :id => @subject.id, :reading_group => @subject_params, :attributes => {public: @ownership.public} | |
220 | 219 | end |
221 | 220 | |
222 | 221 | it 'should redirect to the show view' do |
... | ... | @@ -226,7 +225,8 @@ describe ReadingGroupsController, :type => :controller do |
226 | 225 | |
227 | 226 | context 'without rendering the show view' do |
228 | 227 | before :each do |
229 | - post :update, :id => @subject.id, :reading_group => @subject_params | |
228 | + post :update, :id => @subject.id, :reading_group => @subject_params, :attributes => {public: @ownership.public} | |
229 | + | |
230 | 230 | end |
231 | 231 | |
232 | 232 | it { is_expected.to respond_with(:redirect) } |
... | ... | @@ -238,7 +238,8 @@ describe ReadingGroupsController, :type => :controller do |
238 | 238 | ReadingGroup.expects(:find).with(@subject.id).returns(@subject) |
239 | 239 | ReadingGroup.any_instance.expects(:update).with(@subject_params).returns(false) |
240 | 240 | |
241 | - post :update, :id => @subject.id, :reading_group => @subject_params | |
241 | + post :update, :id => @subject.id, :reading_group => @subject_params, :attributes => {public: @ownership.public} | |
242 | + | |
242 | 243 | end |
243 | 244 | |
244 | 245 | it { is_expected.to render_template(:edit) } |
... | ... | @@ -247,7 +248,8 @@ describe ReadingGroupsController, :type => :controller do |
247 | 248 | |
248 | 249 | context 'when the user does not own the reading group' do |
249 | 250 | before :each do |
250 | - post :update, :id => @subject.id, :reading_group => @subject_params | |
251 | + post :update, :id => @subject.id, :reading_group => @subject_params, :attributes => {public: @ownership.public} | |
252 | + | |
251 | 253 | end |
252 | 254 | |
253 | 255 | it { is_expected.to redirect_to reading_group_path } |
... | ... | @@ -256,7 +258,8 @@ describe ReadingGroupsController, :type => :controller do |
256 | 258 | |
257 | 259 | context 'with no user logged in' do |
258 | 260 | before :each do |
259 | - post :update, :id => @subject.id, :reading_group => @subject_params | |
261 | + post :update, :id => @subject.id, :reading_group => @subject_params, :attributes => {public: @ownership.public} | |
262 | + | |
260 | 263 | end |
261 | 264 | |
262 | 265 | it { is_expected.to redirect_to new_user_session_path } | ... | ... |
spec/controllers/readings_controller_spec.rb
spec/controllers/repositories_controller_spec.rb
... | ... | @@ -5,12 +5,15 @@ describe RepositoriesController, :type => :controller do |
5 | 5 | |
6 | 6 | describe 'new' do |
7 | 7 | context 'with a User logged in' do |
8 | + let!(:user) { FactoryGirl.create(:user) } | |
9 | + let!(:kalibro_configurations) { [FactoryGirl.build(:kalibro_configuration)] } | |
8 | 10 | before :each do |
9 | - sign_in FactoryGirl.create(:user) | |
11 | + sign_in user | |
10 | 12 | end |
11 | 13 | |
12 | 14 | context 'when the current user owns the project' do |
13 | 15 | before :each do |
16 | + KalibroConfiguration.expects(:public_or_owned_by_user).with(user).returns(kalibro_configurations) | |
14 | 17 | Repository.expects(:repository_types).returns([]) |
15 | 18 | subject.expects(:project_owner?).returns true |
16 | 19 | |
... | ... | @@ -41,11 +44,13 @@ describe RepositoriesController, :type => :controller do |
41 | 44 | end |
42 | 45 | |
43 | 46 | describe 'create' do |
47 | + let!(:kalibro_configurations) { [FactoryGirl.build(:kalibro_configuration)] } | |
48 | + let!(:user) { FactoryGirl.create(:user) } | |
44 | 49 | let (:repository) { FactoryGirl.build(:repository, project_id: project.id) } |
45 | 50 | let(:repository_params) { FactoryGirl.build(:repository).to_hash } |
46 | 51 | |
47 | 52 | before do |
48 | - sign_in FactoryGirl.create(:user) | |
53 | + sign_in user | |
49 | 54 | end |
50 | 55 | |
51 | 56 | context 'when the current user owns the project' do |
... | ... | @@ -66,6 +71,7 @@ describe RepositoriesController, :type => :controller do |
66 | 71 | |
67 | 72 | context 'with an invalid field' do |
68 | 73 | before :each do |
74 | + KalibroConfiguration.expects(:public_or_owned_by_user).with(user).returns(kalibro_configurations) | |
69 | 75 | Repository.any_instance.expects(:save).returns(false) |
70 | 76 | Repository.expects(:repository_types).returns([]) |
71 | 77 | |
... | ... | @@ -91,9 +97,7 @@ describe RepositoriesController, :type => :controller do |
91 | 97 | |
92 | 98 | context 'without a specific module_result' do |
93 | 99 | before :each do |
94 | - processing = FactoryGirl.build(:processing) | |
95 | - | |
96 | - KalibroConfiguration.expects(:find).with(repository.id).returns(FactoryGirl.build(:kalibro_configuration_with_id)) | |
100 | + KalibroConfiguration.expects(:find).with(repository.id).returns(FactoryGirl.build(:kalibro_configuration, :with_id)) | |
97 | 101 | Repository.expects(:find).with(repository.id).returns(repository) |
98 | 102 | |
99 | 103 | get :show, id: repository.id.to_s, project_id: project.id.to_s |
... | ... | @@ -105,9 +109,7 @@ describe RepositoriesController, :type => :controller do |
105 | 109 | context 'for an specific module_result' do |
106 | 110 | |
107 | 111 | before :each do |
108 | - processing = FactoryGirl.build(:processing) | |
109 | - | |
110 | - KalibroConfiguration.expects(:find).with(repository.id).returns(FactoryGirl.build(:kalibro_configuration_with_id)) | |
112 | + KalibroConfiguration.expects(:find).with(repository.id).returns(FactoryGirl.build(:kalibro_configuration, :with_id)) | |
111 | 113 | Repository.expects(:find).with(repository.id).returns(repository) |
112 | 114 | |
113 | 115 | get :show, id: repository.id.to_s, project_id: project.id.to_s |
... | ... | @@ -161,12 +163,15 @@ describe RepositoriesController, :type => :controller do |
161 | 163 | let(:repository) { FactoryGirl.build(:repository) } |
162 | 164 | |
163 | 165 | context 'with an User logged in' do |
166 | + let!(:user) { FactoryGirl.create(:user) } | |
167 | + let!(:kalibro_configurations) { [FactoryGirl.build(:kalibro_configuration)] } | |
164 | 168 | before do |
165 | - sign_in FactoryGirl.create(:user) | |
169 | + sign_in user | |
166 | 170 | end |
167 | 171 | |
168 | 172 | context 'when the user owns the repository' do |
169 | 173 | before :each do |
174 | + KalibroConfiguration.expects(:public_or_owned_by_user).with(user).returns(kalibro_configurations) | |
170 | 175 | subject.expects(:repository_owner?).returns true |
171 | 176 | Repository.expects(:find).at_least_once.with(repository.id).returns(repository) |
172 | 177 | Repository.expects(:repository_types).returns(["SUBVERSION"]) |
... | ... | @@ -197,12 +202,15 @@ describe RepositoriesController, :type => :controller do |
197 | 202 | end |
198 | 203 | |
199 | 204 | describe 'update' do |
205 | + let(:kalibro_configurations) { [FactoryGirl.build(:kalibro_configuration)] } | |
200 | 206 | let(:repository) { FactoryGirl.build(:repository) } |
201 | 207 | let(:repository_params) { Hash[FactoryGirl.attributes_for(:repository).map { |k,v| [k.to_s, v.to_s] }] } #FIXME: Mocha is creating the expectations with strings, but FactoryGirl returns everything with sybols and integers |
202 | 208 | |
203 | 209 | context 'when the user is logged in' do |
210 | + let!(:user) { FactoryGirl.create(:user) } | |
211 | + | |
204 | 212 | before do |
205 | - sign_in FactoryGirl.create(:user) | |
213 | + sign_in user | |
206 | 214 | end |
207 | 215 | |
208 | 216 | context 'when user owns the repository' do |
... | ... | @@ -224,6 +232,7 @@ describe RepositoriesController, :type => :controller do |
224 | 232 | |
225 | 233 | context 'with an invalid field' do |
226 | 234 | before :each do |
235 | + KalibroConfiguration.expects(:public_or_owned_by_user).with(user).returns(kalibro_configurations) | |
227 | 236 | Repository.expects(:find).at_least_once.with(repository.id).returns(repository) |
228 | 237 | Repository.any_instance.expects(:update).with(repository_params).returns(false) |
229 | 238 | Repository.expects(:repository_types).returns([]) |
... | ... | @@ -333,7 +342,7 @@ describe RepositoriesController, :type => :controller do |
333 | 342 | subject.expects(:repository_owner?).returns true |
334 | 343 | repository.expects(:process) |
335 | 344 | Repository.expects(:find).at_least_once.with(repository.id).returns(repository) |
336 | - KalibroConfiguration.expects(:find).with(repository.id).returns(FactoryGirl.build(:kalibro_configuration_with_id)) | |
345 | + KalibroConfiguration.expects(:find).with(repository.id).returns(FactoryGirl.build(:kalibro_configuration, :with_id)) | |
337 | 346 | get :process_repository, project_id: project.id.to_s, id: repository.id |
338 | 347 | end |
339 | 348 | it { is_expected.to redirect_to(project_repository_path(repository.project_id, repository.id)) } | ... | ... |
... | ... | @@ -0,0 +1,14 @@ |
1 | +# Read about factories at https://github.com/thoughtbot/factory_girl | |
2 | + | |
3 | +FactoryGirl.define do | |
4 | + factory :kalibro_configuration_attributes, class: KalibroConfigurationAttributes do | |
5 | + sequence(:id, 1) | |
6 | + association :user, strategy: :build | |
7 | + association :kalibro_configuration, :with_id, strategy: :build | |
8 | + self.public true | |
9 | + | |
10 | + trait :private do | |
11 | + self.public false | |
12 | + end | |
13 | + end | |
14 | +end | ... | ... |
spec/factories/kalibro_configurations.rb
1 | - FactoryGirl.define do | |
2 | - factory :kalibro_configuration, class: KalibroConfiguration do | |
1 | +FactoryGirl.define do | |
2 | + factory :kalibro_configuration do | |
3 | 3 | name "Java" |
4 | 4 | description "Code metrics for Java." |
5 | 5 | |
... | ... | @@ -7,17 +7,18 @@ |
7 | 7 | id 1 |
8 | 8 | end |
9 | 9 | |
10 | - factory :kalibro_configuration_with_id, traits: [:with_id] | |
11 | - end | |
12 | - | |
13 | - factory :another_kalibro_configuration, class: KalibroConfiguration do | |
14 | - name "Perl" | |
15 | - description "Code metrics for Perl." | |
10 | + trait :with_sequential_id do | |
11 | + sequence(:id, 1) | |
12 | + end | |
16 | 13 | |
17 | - trait :with_id do | |
18 | - id 12 | |
14 | + factory :another_kalibro_configuration do | |
15 | + name "Perl" | |
16 | + description "Code metrics for Perl." | |
19 | 17 | end |
20 | 18 | |
21 | - factory :another_kalibro_configuration_with_id, traits: [:with_id] | |
19 | + factory :public_kalibro_configuration do | |
20 | + name "Public Kalibro Configuration" | |
21 | + description "Public Configuration." | |
22 | + end | |
22 | 23 | end |
23 | 24 | end | ... | ... |
spec/factories/mezuro_configuration_ownerships.rb
... | ... | @@ -0,0 +1,14 @@ |
1 | +# Read about factories at https://github.com/thoughtbot/factory_girl | |
2 | + | |
3 | +FactoryGirl.define do | |
4 | + factory :reading_group_attributes, class: ReadingGroupAttributes do | |
5 | + sequence(:id, 1) | |
6 | + association :user, strategy: :build | |
7 | + association :reading_group, :with_id, strategy: :build | |
8 | + self.public true | |
9 | + | |
10 | + trait :private do | |
11 | + self.public false | |
12 | + end | |
13 | + end | |
14 | +end | ... | ... |
spec/factories/reading_group_ownerships.rb
spec/factories/reading_groups.rb
... | ... | @@ -4,20 +4,17 @@ FactoryGirl.define do |
4 | 4 | description "Cacildis!" |
5 | 5 | |
6 | 6 | trait :with_id do |
7 | - id 1 | |
7 | + sequence(:id, 1) | |
8 | 8 | end |
9 | 9 | |
10 | - factory :reading_group_with_id, traits: [:with_id] | |
11 | - end | |
12 | - | |
13 | - factory :another_reading_group, class: ReadingGroup do | |
14 | - name "My Reading Group" | |
15 | - description "The best one" | |
16 | - | |
17 | - trait :with_id do | |
18 | - id 2 | |
10 | + factory :another_reading_group do | |
11 | + name "My Reading Group" | |
12 | + description "The best one" | |
19 | 13 | end |
20 | 14 | |
21 | - factory :another_reading_group_with_id, traits: [:with_id] | |
15 | + factory :public_reading_group do | |
16 | + name "Public Reading Group" | |
17 | + description "Public" | |
18 | + end | |
22 | 19 | end |
23 | 20 | end | ... | ... |
spec/factories/users.rb
spec/helpers/kalibro_configurations_helper_spec.rb
... | ... | @@ -3,7 +3,7 @@ require 'rails_helper' |
3 | 3 | describe KalibroConfigurationsHelper, :type => :helper do |
4 | 4 | describe 'kalibro_configuration_owner?' do |
5 | 5 | before :each do |
6 | - @subject = FactoryGirl.build(:kalibro_configuration_with_id) | |
6 | + @subject = FactoryGirl.build(:kalibro_configuration, :with_id) | |
7 | 7 | end |
8 | 8 | |
9 | 9 | context 'returns false if not logged in' do |
... | ... | @@ -18,10 +18,10 @@ describe KalibroConfigurationsHelper, :type => :helper do |
18 | 18 | helper.expects(:user_signed_in?).returns(true) |
19 | 19 | helper.expects(:current_user).returns(FactoryGirl.build(:user)) |
20 | 20 | |
21 | - @ownerships = [] | |
22 | - @ownerships.expects(:find_by_kalibro_configuration_id).with(@subject.id).returns(nil) | |
21 | + @attributes = [] | |
22 | + @attributes.expects(:find_by_kalibro_configuration_id).with(@subject.id).returns(nil) | |
23 | 23 | |
24 | - User.any_instance.expects(:kalibro_configuration_ownerships).returns(@ownerships) | |
24 | + User.any_instance.expects(:kalibro_configuration_attributes).returns(@attributes) | |
25 | 25 | end |
26 | 26 | |
27 | 27 | it { expect(helper.kalibro_configuration_owner?(@subject.id)).to be_falsey } |
... | ... | @@ -32,10 +32,10 @@ describe KalibroConfigurationsHelper, :type => :helper do |
32 | 32 | helper.expects(:user_signed_in?).returns(true) |
33 | 33 | helper.expects(:current_user).returns(FactoryGirl.build(:user)) |
34 | 34 | |
35 | - @ownership = FactoryGirl.build(:kalibro_configuration_ownership) | |
36 | - @ownerships = [] | |
37 | - @ownerships.expects(:find_by_kalibro_configuration_id).with(@subject.id).returns(@ownership) | |
38 | - User.any_instance.expects(:kalibro_configuration_ownerships).returns(@ownerships) | |
35 | + @ownership = FactoryGirl.build(:kalibro_configuration_attributes) | |
36 | + @attributes = [] | |
37 | + @attributes.expects(:find_by_kalibro_configuration_id).with(@subject.id).returns(@ownership) | |
38 | + User.any_instance.expects(:kalibro_configuration_attributes).returns(@attributes) | |
39 | 39 | end |
40 | 40 | |
41 | 41 | it { expect(helper.kalibro_configuration_owner?(@subject.id)).to be_truthy } | ... | ... |
spec/helpers/metric_configurations_helper_spec.rb
... | ... | @@ -9,7 +9,7 @@ describe MetricConfigurationsHelper, :type => :helper do |
9 | 9 | end |
10 | 10 | |
11 | 11 | describe 'reading_group_options' do |
12 | - let! (:reading_group) { FactoryGirl.build(:reading_group_with_id) } | |
12 | + let! (:reading_group) { FactoryGirl.build(:reading_group, :with_id) } | |
13 | 13 | |
14 | 14 | before :each do |
15 | 15 | ReadingGroup.expects(:all).returns([reading_group]) | ... | ... |
spec/helpers/reading_groups_helper_spec.rb
... | ... | @@ -4,7 +4,7 @@ describe ReadingGroupsHelper, :type => :helper do |
4 | 4 | |
5 | 5 | describe 'reading_group_owner?' do |
6 | 6 | before :each do |
7 | - @subject = FactoryGirl.build(:reading_group_with_id) | |
7 | + @subject = FactoryGirl.build(:reading_group, :with_id) | |
8 | 8 | end |
9 | 9 | |
10 | 10 | context 'returns false if not logged in' do |
... | ... | @@ -22,7 +22,7 @@ describe ReadingGroupsHelper, :type => :helper do |
22 | 22 | @ownerships = [] |
23 | 23 | @ownerships.expects(:find_by_reading_group_id).with(@subject.id).returns(nil) |
24 | 24 | |
25 | - User.any_instance.expects(:reading_group_ownerships).returns(@ownerships) | |
25 | + User.any_instance.expects(:reading_group_attributes).returns(@ownerships) | |
26 | 26 | end |
27 | 27 | |
28 | 28 | it { expect(helper.reading_groups_owner?(@subject.id)).to be_falsey } |
... | ... | @@ -33,10 +33,10 @@ describe ReadingGroupsHelper, :type => :helper do |
33 | 33 | helper.expects(:user_signed_in?).returns(true) |
34 | 34 | helper.expects(:current_user).returns(FactoryGirl.build(:user)) |
35 | 35 | |
36 | - @ownership = FactoryGirl.build(:reading_group_ownership) | |
36 | + @ownership = FactoryGirl.build(:reading_group_attributes) | |
37 | 37 | @ownerships = [] |
38 | 38 | @ownerships.expects(:find_by_reading_group_id).with(@subject.id).returns(@ownership) |
39 | - User.any_instance.expects(:reading_group_ownerships).returns(@ownerships) | |
39 | + User.any_instance.expects(:reading_group_attributes).returns(@ownerships) | |
40 | 40 | end |
41 | 41 | |
42 | 42 | it { expect(helper.reading_groups_owner?(@subject.id)).to be_truthy } | ... | ... |
... | ... | @@ -0,0 +1,102 @@ |
1 | +require 'rails_helper' | |
2 | + | |
3 | +describe KalibroConfiguration, :type => :model do | |
4 | + describe 'methods' do | |
5 | + describe 'class methods' do | |
6 | + describe 'public_or_owned_by_user' do | |
7 | + def build_attrs(kc_iter, *traits, **params) | |
8 | + kalibro_configuration = kc_iter.next | |
9 | + attr = FactoryGirl.build(:kalibro_configuration_attributes, *traits, params.merge(kalibro_configuration: kalibro_configuration)) | |
10 | + kalibro_configuration.stubs(:attributes).returns(attr) | |
11 | + attr | |
12 | + end | |
13 | + | |
14 | + let!(:kalibro_configurations) { FactoryGirl.build_list(:kalibro_configuration, 4, :with_sequential_id) } | |
15 | + let!(:kc_iter) { kalibro_configurations.each } | |
16 | + | |
17 | + let!(:one_user) { FactoryGirl.build(:user) } | |
18 | + let!(:other_user) { FactoryGirl.build(:another_user) } | |
19 | + | |
20 | + let!(:ones_private_attrs) { build_attrs(kc_iter, :private, user: one_user) } | |
21 | + let!(:others_private_attrs) { build_attrs(kc_iter, :private, user: other_user) } | |
22 | + let!(:ones_public_attrs) { build_attrs(kc_iter, user: one_user) } | |
23 | + let!(:others_public_attrs) { build_attrs(kc_iter, user: other_user) } | |
24 | + | |
25 | + let!(:public_attrs) { [ones_public_attrs, others_public_attrs] } | |
26 | + let(:public_kalibro_configurations) { public_attrs.map(&:kalibro_configuration) } | |
27 | + | |
28 | + let(:ones_or_public_attrs) { public_attrs + [ones_private_attrs] } | |
29 | + let(:ones_or_public_kalibro_configurations) { ones_or_public_attrs.map(&:kalibro_configuration) } | |
30 | + | |
31 | + context 'when the kalibro configuration exists' do | |
32 | + before :each do | |
33 | + # Map the kalibro_configuration attributes to the corresponding Kalibro Configuration | |
34 | + kalibro_configurations.each do |kc| | |
35 | + KalibroConfiguration.stubs(:find).with(kc.id).returns(kc) | |
36 | + end | |
37 | + | |
38 | + KalibroConfigurationAttributes.expects(:where).with(public: true).returns(public_attrs) | |
39 | + end | |
40 | + | |
41 | + context 'when user is not provided' do | |
42 | + it 'should find all public reading groups' do | |
43 | + expect(KalibroConfiguration.public).to eq(public_kalibro_configurations) | |
44 | + end | |
45 | + end | |
46 | + | |
47 | + context 'when user is provided' do | |
48 | + before do | |
49 | + KalibroConfigurationAttributes.expects(:where).with(user_id: one_user.id, public: false).returns([ones_private_attrs]) | |
50 | + end | |
51 | + | |
52 | + it 'should find all public and owned reading groups' do | |
53 | + expect(KalibroConfiguration.public_or_owned_by_user(one_user)).to eq(ones_or_public_kalibro_configurations) | |
54 | + end | |
55 | + end | |
56 | + end | |
57 | + | |
58 | + context 'when the kalibro configuration does not' do | |
59 | + before :each do | |
60 | + # Map the kalibro_configuration attributes to the corresponding Kalibro Configuration | |
61 | + kalibro_configurations.each do |kc| | |
62 | + KalibroConfiguration.stubs(:find).with(kc.id).raises(KalibroClient::Errors::RecordNotFound) | |
63 | + end | |
64 | + | |
65 | + KalibroConfigurationAttributes.expects(:where).with(public: true).returns(public_attrs) | |
66 | + end | |
67 | + | |
68 | + it 'is expected to be empty' do | |
69 | + expect(KalibroConfiguration.public).to be_empty | |
70 | + end | |
71 | + end | |
72 | + end | |
73 | + end | |
74 | + | |
75 | + describe 'destroy' do | |
76 | + context 'when attributes exist' do | |
77 | + let!(:kalibro_configuration_attributes) { FactoryGirl.build(:kalibro_configuration_attributes) } | |
78 | + let!(:kalibro_configuration) { kalibro_configuration_attributes.kalibro_configuration } | |
79 | + | |
80 | + it 'should be destroyed' do | |
81 | + kalibro_configuration.expects(:attributes).twice.returns(kalibro_configuration_attributes) | |
82 | + kalibro_configuration_attributes.expects(:destroy) | |
83 | + KalibroClient::Entities::Configurations::KalibroConfiguration.any_instance.expects(:destroy).returns(kalibro_configuration) | |
84 | + kalibro_configuration.destroy | |
85 | + end | |
86 | + | |
87 | + it 'is expected to clean the attributes memoization' do | |
88 | + # Call attributes once so it memoizes | |
89 | + KalibroConfigurationAttributes.expects(:find_by).with(kalibro_configuration_id: kalibro_configuration.id).returns(kalibro_configuration_attributes) | |
90 | + expect(kalibro_configuration.attributes).to eq(kalibro_configuration_attributes) | |
91 | + | |
92 | + # Destroying | |
93 | + kalibro_configuration.destroy | |
94 | + | |
95 | + # The expectation call will try to find the attributes on the database which should be nil since it was destroyed | |
96 | + KalibroConfigurationAttributes.expects(:find_by).with(kalibro_configuration_id: kalibro_configuration.id).returns(nil) | |
97 | + expect(kalibro_configuration.attributes).to be_nil | |
98 | + end | |
99 | + end | |
100 | + end | |
101 | + end | |
102 | +end | ... | ... |
spec/models/mezuro_configuration_ownership_spec.rb
spec/models/project_spec.rb
... | ... | @@ -38,5 +38,32 @@ describe Project, :type => :model do |
38 | 38 | expect(subject.attributes).to eq(project_attributes) |
39 | 39 | end |
40 | 40 | end |
41 | + | |
42 | + describe 'destroy' do | |
43 | + context 'when attributes exist' do | |
44 | + let!(:project) { FactoryGirl.build(:project) } | |
45 | + let!(:project_attributes) { FactoryGirl.build(:project_attributes, project_id: project.id) } | |
46 | + | |
47 | + it 'should be destroyed' do | |
48 | + project.expects(:attributes).twice.returns(project_attributes) | |
49 | + project_attributes.expects(:destroy) | |
50 | + KalibroClient::Entities::Processor::Project.any_instance.expects(:destroy).returns(project) | |
51 | + project.destroy | |
52 | + end | |
53 | + | |
54 | + it 'is expected to clean the attributes memoization' do | |
55 | + # Call attributes once so it memoizes | |
56 | + ProjectAttributes.expects(:find_by).with(project_id: project.id).returns(project_attributes) | |
57 | + expect(project.attributes).to eq(project_attributes) | |
58 | + | |
59 | + # Destroying | |
60 | + project.destroy | |
61 | + | |
62 | + # The expectation call will try to find the attributes on the database which should be nil since it was destroyed | |
63 | + ProjectAttributes.expects(:find_by).with(project_id: project.id).returns(nil) | |
64 | + expect(project.attributes).to_not eq(project_attributes) | |
65 | + end | |
66 | + end | |
67 | + end | |
41 | 68 | end |
42 | 69 | end | ... | ... |
spec/models/reading_group_ownership_spec.rb
spec/models/reading_group_spec.rb
... | ... | @@ -4,13 +4,13 @@ describe ReadingGroup, :type => :model do |
4 | 4 | describe 'methods' do |
5 | 5 | describe 'persisted?' do |
6 | 6 | before :each do |
7 | - @subject = FactoryGirl.build(:reading_group_with_id) | |
7 | + @subject = FactoryGirl.build(:reading_group, :with_id) | |
8 | 8 | end |
9 | 9 | end |
10 | 10 | |
11 | 11 | describe 'update' do |
12 | 12 | before :each do |
13 | - @qt = FactoryGirl.build(:reading_group_with_id) | |
13 | + @qt = FactoryGirl.build(:reading_group, :with_id) | |
14 | 14 | @qt_params = @qt.to_hash |
15 | 15 | end |
16 | 16 | |
... | ... | @@ -36,7 +36,7 @@ describe ReadingGroup, :type => :model do |
36 | 36 | end |
37 | 37 | |
38 | 38 | describe 'readings' do |
39 | - subject { FactoryGirl.build(:reading_group_with_id) } | |
39 | + subject { FactoryGirl.build(:reading_group, :with_id) } | |
40 | 40 | let(:reading) { FactoryGirl.build(:reading_with_id) } |
41 | 41 | |
42 | 42 | it 'should call readings_of on the Reading model' do |
... | ... | @@ -45,5 +45,93 @@ describe ReadingGroup, :type => :model do |
45 | 45 | expect(subject.readings).to include(reading) |
46 | 46 | end |
47 | 47 | end |
48 | + | |
49 | + describe 'destroy' do | |
50 | + context 'when attributes exist' do | |
51 | + let!(:reading_group_attributes) { FactoryGirl.build(:reading_group_attributes) } | |
52 | + let!(:reading_group) { reading_group_attributes.reading_group } | |
53 | + | |
54 | + it 'should be destroyed' do | |
55 | + reading_group.expects(:attributes).twice.returns(reading_group_attributes) | |
56 | + reading_group_attributes.expects(:destroy) | |
57 | + KalibroClient::Entities::Configurations::ReadingGroup.any_instance.expects(:destroy).returns(reading_group) | |
58 | + reading_group.destroy | |
59 | + end | |
60 | + | |
61 | + it 'is expected to clean the attributes memoization' do | |
62 | + # Call attributes once so it memoizes | |
63 | + ReadingGroupAttributes.expects(:find_by).with(reading_group_id: reading_group.id).returns(reading_group_attributes) | |
64 | + expect(reading_group.attributes).to eq(reading_group_attributes) | |
65 | + | |
66 | + # Destroying | |
67 | + reading_group.destroy | |
68 | + | |
69 | + # The expectation call will try to find the attributes on the database which should be nil since it was destroyed | |
70 | + ReadingGroupAttributes.expects(:find_by).with(reading_group_id: reading_group.id).returns(nil) | |
71 | + expect(reading_group.attributes).to be_nil | |
72 | + end | |
73 | + end | |
74 | + end | |
75 | + end | |
76 | + | |
77 | + describe 'class methods' do | |
78 | + describe 'public_or_owned_by_user' do | |
79 | + let!(:user) { FactoryGirl.build(:user) } | |
80 | + | |
81 | + let!(:owned_private_attrs) { FactoryGirl.build(:reading_group_attributes, :private, user_id: user.id) } | |
82 | + let!(:owned_public_attrs) { FactoryGirl.build(:reading_group_attributes, user_id: user.id) } | |
83 | + let!(:not_owned_private_attrs) { FactoryGirl.build(:reading_group_attributes, :private, user_id: user.id+1) } | |
84 | + let!(:not_owned_public_attrs) { FactoryGirl.build(:reading_group_attributes, user_id: user.id+1) } | |
85 | + | |
86 | + let!(:public_attrs) { [owned_public_attrs, not_owned_public_attrs] } | |
87 | + let(:public_reading_groups) { public_attrs.map(&:reading_group) } | |
88 | + | |
89 | + let!(:owned_or_public_attrs) { public_attrs + [owned_private_attrs] } | |
90 | + let!(:owned_or_public_reading_groups) { owned_or_public_attrs.map(&:reading_group) } | |
91 | + | |
92 | + let(:all_reading_groups) { owned_or_public_reading_groups + [not_owned_private_attrs.reading_group] } | |
93 | + | |
94 | + context 'when reading groups exist' do | |
95 | + before :each do | |
96 | + # Make sure the reading groups are found when looked up by the Attributes by their id | |
97 | + all_reading_groups.each do |reading_group| | |
98 | + ReadingGroup.stubs(:find).with(reading_group.id).returns(reading_group) | |
99 | + end | |
100 | + | |
101 | + ReadingGroupAttributes.expects(:where).with(public: true).returns(public_attrs) | |
102 | + end | |
103 | + | |
104 | + context 'when user is not provided' do | |
105 | + it 'should find all public reading groups' do | |
106 | + expect(ReadingGroup.public).to eq(public_reading_groups) | |
107 | + end | |
108 | + end | |
109 | + | |
110 | + context 'when user is provided' do | |
111 | + before do | |
112 | + ReadingGroupAttributes.expects(:where).with(user_id: user.id, public: false).returns([owned_private_attrs]) | |
113 | + end | |
114 | + | |
115 | + it 'should find all public and owned reading groups' do | |
116 | + expect(ReadingGroup.public_or_owned_by_user(user)).to eq(owned_or_public_reading_groups) | |
117 | + end | |
118 | + end | |
119 | + end | |
120 | + | |
121 | + context 'when no reading groups exist' do | |
122 | + before :each do | |
123 | + # Map the reading group attributes to the corresponding Reading Group | |
124 | + all_reading_groups.each do |reading_group| | |
125 | + ReadingGroup.stubs(:find).with(reading_group.id).raises(KalibroClient::Errors::RecordNotFound) | |
126 | + end | |
127 | + | |
128 | + ReadingGroupAttributes.expects(:where).with(public: true).returns(public_attrs) | |
129 | + end | |
130 | + | |
131 | + it 'is expected to be empty' do | |
132 | + expect(ReadingGroup.public).to be_empty | |
133 | + end | |
134 | + end | |
135 | + end | |
48 | 136 | end |
49 | 137 | end | ... | ... |
spec/models/user_spec.rb
... | ... | @@ -11,8 +11,8 @@ describe User, :type => :model do |
11 | 11 | |
12 | 12 | describe 'associations' do |
13 | 13 | it { is_expected.to have_many(:project_attributes) } |
14 | - it { is_expected.to have_many(:reading_group_ownerships) } | |
15 | - it { is_expected.to have_many(:kalibro_configuration_ownerships) } | |
14 | + it { is_expected.to have_many(:reading_group_attributes) } | |
15 | + it { is_expected.to have_many(:kalibro_configuration_attributes) } | |
16 | 16 | end |
17 | 17 | |
18 | 18 | describe 'methods' do | ... | ... |