From 4db1ce8f2f490e8ef4559f4ab5949ef1f68f8fcc Mon Sep 17 00:00:00 2001 From: Jorge Morante Date: Tue, 19 Mar 2019 14:16:01 +0100 Subject: [PATCH 1/3] add is_group feature --- app/assets/stylesheets/application.css.scss | 10 ++++++++++ app/controllers/posts_controller.rb | 2 +- app/views/shared/_post.html.erb | 3 +++ app/views/shared/_post_form.html.erb | 6 ++++++ app/views/shared/_posts.html.erb | 3 +++ config/locales/en.yml | 1 + db/migrate/20190319121401_add_is_group_to_post.rb | 5 +++++ db/schema.rb | 5 +++-- 8 files changed, 32 insertions(+), 3 deletions(-) create mode 100644 db/migrate/20190319121401_add_is_group_to_post.rb diff --git a/app/assets/stylesheets/application.css.scss b/app/assets/stylesheets/application.css.scss index 086a5c238..30da15afe 100644 --- a/app/assets/stylesheets/application.css.scss +++ b/app/assets/stylesheets/application.css.scss @@ -179,6 +179,10 @@ html { margin: 14px 0; padding: 5px 20px; + .post__group_label { + margin-left: 10px; + } + h4 { font-weight: bold; display: block; @@ -710,3 +714,9 @@ label[required]::after{ line-height: 1.6em; } } + +.inline-checkbox { + vertical-align: middle; + display: inline; + margin: 0 !important; +} diff --git a/app/controllers/posts_controller.rb b/app/controllers/posts_controller.rb index 71c35f9b1..83d88fea2 100644 --- a/app/controllers/posts_controller.rb +++ b/app/controllers/posts_controller.rb @@ -108,7 +108,7 @@ def set_user_id(p) def post_params permitted_fields = [:description, :end_on, :global, :joinable, :permanent, - :start_on, :title, :category_id, :user_id, + :start_on, :title, :category_id, :user_id, :is_group, :publisher_id, :active, tag_list: []] params.fetch(resource, {}).permit(*permitted_fields).tap do |p| diff --git a/app/views/shared/_post.html.erb b/app/views/shared/_post.html.erb index 3751e5de3..e9118dd10 100644 --- a/app/views/shared/_post.html.erb +++ b/app/views/shared/_post.html.erb @@ -7,6 +7,9 @@

<%= post.class.model_name.human %> + <% if post.is_group %> +
<%= I18n.t('activerecord.attributes.post.is_group') %>
+ <% end %>

diff --git a/app/views/shared/_post_form.html.erb b/app/views/shared/_post_form.html.erb index 7717e54c2..4d5d264bf 100644 --- a/app/views/shared/_post_form.html.erb +++ b/app/views/shared/_post_form.html.erb @@ -24,6 +24,12 @@ { include_blank: true }, class: "form-control" %>
+ <% if post.class.to_s == 'Offer' %> +
+ <%= f.label :is_group, required: true %> + <%= f.check_box :is_group, class: 'inline-checkbox' %> +
+ <% end %>
<%= f.label :tag_list %> <%= f.select :tag_list, diff --git a/app/views/shared/_posts.html.erb b/app/views/shared/_posts.html.erb index 1e2dc89e6..6e9de9ee0 100644 --- a/app/views/shared/_posts.html.erb +++ b/app/views/shared/_posts.html.erb @@ -2,6 +2,9 @@

<%= link_to post.title, post %> + <% if post.is_group %> +
<%= I18n.t('activerecord.attributes.post.is_group') %>
+ <% end %>

<%= strip_tags(post.rendered_description.to_html) %> diff --git a/config/locales/en.yml b/config/locales/en.yml index 199e837fc..1cba69b94 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -44,6 +44,7 @@ en: start_on: Start on tag_list: Tags title: Title + is_group: Group offer updated_at: Updated transfer: amount: Quantity diff --git a/db/migrate/20190319121401_add_is_group_to_post.rb b/db/migrate/20190319121401_add_is_group_to_post.rb new file mode 100644 index 000000000..5e62aee63 --- /dev/null +++ b/db/migrate/20190319121401_add_is_group_to_post.rb @@ -0,0 +1,5 @@ +class AddIsGroupToPost < ActiveRecord::Migration + def change + add_column :posts, :is_group, :boolean, default: false + end +end diff --git a/db/schema.rb b/db/schema.rb index 38963d039..bcb4a05c1 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20181004200104) do +ActiveRecord::Schema.define(version: 20190319121401) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -146,10 +146,11 @@ t.boolean "global" t.datetime "created_at" t.datetime "updated_at" - t.text "tags", array: true + t.text "tags", array: true t.integer "publisher_id" t.integer "organization_id" t.boolean "active", default: true + t.boolean "is_group", default: false end add_index "posts", ["category_id"], name: "index_posts_on_category_id", using: :btree From 265961c728bdb00d022216522c271fae770d605c Mon Sep 17 00:00:00 2001 From: Jorge Morante Date: Thu, 21 Mar 2019 15:37:07 +0100 Subject: [PATCH 2/3] use different copies in form, for offers and inquiries --- app/views/shared/_post.html.erb | 2 +- app/views/shared/_post_form.html.erb | 10 ++++------ app/views/shared/_posts.html.erb | 2 +- config/locales/en.yml | 7 ++++++- 4 files changed, 12 insertions(+), 9 deletions(-) diff --git a/app/views/shared/_post.html.erb b/app/views/shared/_post.html.erb index e9118dd10..15ee103f5 100644 --- a/app/views/shared/_post.html.erb +++ b/app/views/shared/_post.html.erb @@ -8,7 +8,7 @@

<%= post.class.model_name.human %> <% if post.is_group %> -
<%= I18n.t('activerecord.attributes.post.is_group') %>
+
<%= I18n.t("activerecord.attributes.#{post.class.name.downcase}.is_group") %>
<% end %>

diff --git a/app/views/shared/_post_form.html.erb b/app/views/shared/_post_form.html.erb index 4d5d264bf..59613136a 100644 --- a/app/views/shared/_post_form.html.erb +++ b/app/views/shared/_post_form.html.erb @@ -24,12 +24,10 @@ { include_blank: true }, class: "form-control" %>
- <% if post.class.to_s == 'Offer' %> -
- <%= f.label :is_group, required: true %> - <%= f.check_box :is_group, class: 'inline-checkbox' %> -
- <% end %> +
+ <%= label :post, :is_group, I18n.t("shared.post_form.group_#{post.class.name.downcase}"), required: true %> + <%= f.check_box :is_group, class: 'inline-checkbox' %> +
<%= f.label :tag_list %> <%= f.select :tag_list, diff --git a/app/views/shared/_posts.html.erb b/app/views/shared/_posts.html.erb index 6e9de9ee0..69fbd1e7c 100644 --- a/app/views/shared/_posts.html.erb +++ b/app/views/shared/_posts.html.erb @@ -3,7 +3,7 @@

<%= link_to post.title, post %> <% if post.is_group %> -
<%= I18n.t('activerecord.attributes.post.is_group') %>
+
<%= I18n.t("activerecord.attributes.#{post.class.name.downcase}.is_group") %>
<% end %>

diff --git a/config/locales/en.yml b/config/locales/en.yml index 1cba69b94..0bdfdcba8 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -34,6 +34,10 @@ en: reg_number_seq: User sequence number theme: Theme updated_at: Updated + offer: + is_group: Group offer + inquiry: + is_group: Group inquiry post: category: Category created_at: Created @@ -44,7 +48,6 @@ en: start_on: Start on tag_list: Tags title: Title - is_group: Group offer updated_at: Updated transfer: amount: Quantity @@ -420,6 +423,8 @@ en: delete_reason: Are you sure to delete this comment? movements: Movements post_form: + group_offer: Is it a group offer? + group_inquiry: Is it a group inquiry? you_can_use: You can use simple_form: error_notification: From 9aa2b48218096ffbadab9a364ecfb0c47fa09b92 Mon Sep 17 00:00:00 2001 From: Jorge Morante Date: Thu, 21 Mar 2019 15:47:06 +0100 Subject: [PATCH 3/3] update view tests --- spec/views/inquiries/show.html.erb_spec.rb | 37 ++++++++++++++++++++++ spec/views/offers/show.html.erb_spec.rb | 21 ++++++++++++ 2 files changed, 58 insertions(+) create mode 100644 spec/views/inquiries/show.html.erb_spec.rb diff --git a/spec/views/inquiries/show.html.erb_spec.rb b/spec/views/inquiries/show.html.erb_spec.rb new file mode 100644 index 000000000..6fea82f5c --- /dev/null +++ b/spec/views/inquiries/show.html.erb_spec.rb @@ -0,0 +1,37 @@ +require 'spec_helper' + +RSpec.describe 'inquiries/show' do + let(:organization) { Fabricate(:organization) } + let(:member) { Fabricate(:member, organization: organization) } + let(:inquiry) { Fabricate(:inquiry, user: member.user, organization: organization) } + let(:group_inquiry) { Fabricate(:inquiry, user: member.user, organization: organization, is_group: true) } + let(:destination_account) { Fabricate(:account) } + + + context 'when the user is not logged in' do + before do + allow(view).to receive(:current_user).and_return(nil) + allow(view).to receive(:current_organization).and_return(nil) + end + + context 'when it is not a group inquiry' do + it 'displays a label' do + assign :inquiry, inquiry + assign :destination_account, destination_account + render template: 'inquiries/show' + + expect(rendered).to_not include(I18n.t('activerecord.attributes.inquiry.is_group')) + end + end + + context 'when it is a group inquiry' do + it 'displays a label' do + assign :inquiry, group_inquiry + assign :destination_account, destination_account + render template: 'inquiries/show' + + expect(rendered).to include(I18n.t('activerecord.attributes.inquiry.is_group')) + end + end + end +end diff --git a/spec/views/offers/show.html.erb_spec.rb b/spec/views/offers/show.html.erb_spec.rb index 42b992c78..f7cdf4338 100644 --- a/spec/views/offers/show.html.erb_spec.rb +++ b/spec/views/offers/show.html.erb_spec.rb @@ -4,6 +4,7 @@ let(:organization) { Fabricate(:organization) } let(:member) { Fabricate(:member, organization: organization) } let(:offer) { Fabricate(:offer, user: member.user, organization: organization) } + let(:group_offer) { Fabricate(:offer, user: member.user, organization: organization, is_group: true) } let(:destination_account) { Fabricate(:account) } before do @@ -152,5 +153,25 @@ expect(rendered).to_not include(offer.user.email) end + + context 'when it is not a group offer' do + it 'displays a label' do + assign :offer, offer + assign :destination_account, destination_account + render template: 'offers/show' + + expect(rendered).to_not include(I18n.t('activerecord.attributes.offer.is_group')) + end + end + + context 'when it is a group offer' do + it 'displays a label' do + assign :offer, group_offer + assign :destination_account, destination_account + render template: 'offers/show' + + expect(rendered).to include(I18n.t('activerecord.attributes.offer.is_group')) + end + end end end