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}}
- {{/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