Legislation Answer model

This commit is contained in:
Amaia Castro
2016-12-27 11:02:27 +01:00
parent 573e281a8f
commit 5e01b380cd
8 changed files with 84 additions and 0 deletions

View File

@@ -0,0 +1,9 @@
class Legislation::Answer < ActiveRecord::Base
belongs_to :question, class_name: 'Legislation::Question', foreign_key: 'legislation_question_id', dependent: :destroy, inverse_of: :answers, counter_cache: true
belongs_to :question_option, class_name: 'Legislation::QuestionOption', foreign_key: 'legislation_question_option_id', dependent: :destroy, inverse_of: :answers, counter_cache: true
belongs_to :user, dependent: :destroy, inverse_of: :legislation_answers
validates :question, presence: true, uniqueness: { scope: :user_id}
validates :question_option, presence: true
validates :user, presence: true
end

View File

@@ -6,6 +6,7 @@ class Legislation::Question < ActiveRecord::Base
belongs_to :process, class_name: 'Legislation::Process', foreign_key: 'legislation_process_id'
has_many :question_options, class_name: 'Legislation::QuestionOption', foreign_key: 'legislation_question_id', dependent: :destroy, inverse_of: :question
has_many :answers, class_name: 'Legislation::Answer', foreign_key: 'legislation_question_id', dependent: :destroy, inverse_of: :question
has_many :comments, as: :commentable
accepts_nested_attributes_for :question_options, :reject_if => proc { |attributes| attributes[:value].blank? }, allow_destroy: true

View File

@@ -3,6 +3,7 @@ class Legislation::QuestionOption < ActiveRecord::Base
include ActsAsParanoidAliases
belongs_to :question, class_name: 'Legislation::Question', foreign_key: 'legislation_question_id', inverse_of: :question_options
has_many :answers, class_name: 'Legislation::Answer', foreign_key: 'legislation_question_id', dependent: :destroy, inverse_of: :question
validates :question, presence: true
validates :value, presence: true, uniqueness: { scope: :legislation_question_id }

View File

@@ -25,6 +25,7 @@ class User < ActiveRecord::Base
has_many :notifications
has_many :direct_messages_sent, class_name: 'DirectMessage', foreign_key: :sender_id
has_many :direct_messages_received, class_name: 'DirectMessage', foreign_key: :receiver_id
has_many :legislation_answers, class_name: 'Legislation::Answer', dependent: :destroy, inverse_of: :user
belongs_to :geozone
validates :username, presence: true, if: :username_required?

View File

@@ -0,0 +1,13 @@
class CreateLegislationAnswers < ActiveRecord::Migration
def change
create_table :legislation_answers do |t|
t.references :legislation_question, index: true
t.references :legislation_question_option, index: true
t.references :user, index: true
t.datetime :hidden_at, index: true
t.timestamps null: false
end
end
end

View File

@@ -227,6 +227,20 @@ ActiveRecord::Schema.define(version: 20161222180927) do
t.datetime "updated_at", null: false
end
create_table "legislation_answers", force: :cascade do |t|
t.integer "legislation_question_id"
t.integer "legislation_question_option_id"
t.integer "user_id"
t.datetime "hidden_at"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
add_index "legislation_answers", ["hidden_at"], name: "index_legislation_answers_on_hidden_at", using: :btree
add_index "legislation_answers", ["legislation_question_id"], name: "index_legislation_answers_on_legislation_question_id", using: :btree
add_index "legislation_answers", ["legislation_question_option_id"], name: "index_legislation_answers_on_legislation_question_option_id", using: :btree
add_index "legislation_answers", ["user_id"], name: "index_legislation_answers_on_user_id", using: :btree
create_table "legislation_draft_versions", force: :cascade do |t|
t.integer "legislation_process_id"
t.string "title"

View File

@@ -411,4 +411,10 @@ FactoryGirl.define do
question factory: :legislation_question
sequence(:value) { |n| "Option #{n}" }
end
factory :legislation_answer, class: 'Legislation::Answer' do
question factory: :legislation_question
question_option factory: :legislation_question_option
user
end
end

View File

@@ -0,0 +1,39 @@
require 'rails_helper'
RSpec.describe Legislation::Answer, type: :model do
let(:legislation_answer) { build(:legislation_answer) }
it "should be valid" do
expect(legislation_answer).to be_valid
end
it "counts answers" do
question = create(:legislation_question)
option_1 = create(:legislation_question_option, question: question, value: 'Yes')
option_2 = create(:legislation_question_option, question: question, value: 'No')
answer = create(:legislation_answer, question: question, question_option: option_2)
expect(answer).to be_valid
expect(question.answers_count).to eq 1
expect(option_2.answers_count).to eq 1
expect(option_1.answers_count).to eq 0
end
it "can't answer same question more than once" do
question = create(:legislation_question)
option_1 = create(:legislation_question_option, question: question, value: 'Yes')
option_2 = create(:legislation_question_option, question: question, value: 'No')
user = create(:user)
answer = create(:legislation_answer, question: question, question_option: option_2, user: user)
expect(answer).to be_valid
second_answer = build(:legislation_answer, question: question, question_option: option_1, user: user)
expect(second_answer).to be_invalid
expect(question.answers_count).to eq 1
expect(option_2.answers_count).to eq 1
expect(option_1.answers_count).to eq 0
end
end