diff --git a/app/assets/javascripts/app/views/poll_view.js b/app/assets/javascripts/app/views/poll_view.js index 5b41f548c..7cc815627 100644 --- a/app/assets/javascripts/app/views/poll_view.js +++ b/app/assets/javascripts/app/views/poll_view.js @@ -10,6 +10,16 @@ app.views.Poll = app.views.Base.extend({ this.model.bind('change', this.render, this); }, + presenter: function(){ + var defaultPresenter = this.defaultPresenter(); + var show_form = defaultPresenter.loggedIn && + !this.model.attributes.already_participated_in_poll; + + return _.extend(defaultPresenter, { + show_form: show_form + }); + }, + postRenderTemplate: function() { this.poll = this.model.attributes.poll; this.setProgressBar(); diff --git a/app/assets/templates/poll_tpl.jst.hbs b/app/assets/templates/poll_tpl.jst.hbs index 6984a493d..20def69b1 100644 --- a/app/assets/templates/poll_tpl.jst.hbs +++ b/app/assets/templates/poll_tpl.jst.hbs @@ -7,7 +7,7 @@
- {{#unless already_participated_in_poll}} + {{#if show_form}}
{{#poll.poll_answers}}
{{/poll.poll_answers}} - {{/unless}} + {{/if}} {{/if}} diff --git a/app/presenters/post_presenter.rb b/app/presenters/post_presenter.rb index d797da86c..e381b40d3 100644 --- a/app/presenters/post_presenter.rb +++ b/app/presenters/post_presenter.rb @@ -77,7 +77,7 @@ class PostPresenter private def already_participated_in_poll - if @post.poll + if @post.poll && user_signed_in? @post.poll.already_participated?(current_user) end end diff --git a/spec/javascripts/app/views/poll_view_spec.js b/spec/javascripts/app/views/poll_view_spec.js index d6fe1cfc7..1fa4442dd 100644 --- a/spec/javascripts/app/views/poll_view_spec.js +++ b/spec/javascripts/app/views/poll_view_spec.js @@ -33,5 +33,21 @@ describe("app.views.Poll", function(){ expect(obj.poll_id).toBe(poll.poll_id); expect(obj.poll_answer_id).toBe(answer.id); }) - }) + }); + + describe("vote form", function(){ + it('show vote form when user is logged in and not voted before', function(){ + expect(this.view.$('form').length).toBe(1); + }); + it('hide vote form when user voted before', function(){ + this.view.model.attributes.already_participated_in_poll = true; + this.view.render(); + expect(this.view.$('form').length).toBe(0); + }); + it("hide vote form when user not logged in", function(){ + logout(); + this.view.render(); + expect(this.view.$('form').length).toBe(0); + }); + }); }); diff --git a/spec/presenters/post_presenter_spec.rb b/spec/presenters/post_presenter_spec.rb index dca62936e..086806c31 100644 --- a/spec/presenters/post_presenter_spec.rb +++ b/spec/presenters/post_presenter_spec.rb @@ -3,6 +3,7 @@ require 'spec_helper' describe PostPresenter do before do @sm = FactoryGirl.create(:status_message, :public => true) + @sm_with_poll = FactoryGirl.create(:status_message_with_poll, public: true) @presenter = PostPresenter.new(@sm, bob) @unauthenticated_presenter = PostPresenter.new(@sm) end @@ -96,4 +97,11 @@ describe PostPresenter do end end end + + describe '#poll' do + it 'works without a user' do + presenter = PostPresenter.new(@sm_with_poll) + presenter.as_json.should be_a(Hash) + end + end end