1 require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
3 describe Questionnaire do
4 fixtures :questionnaires, :questions, :questionnaire_answers,:question_choices,:question_answers
6 @questionnaire = Questionnaire.new
8 describe "validateチェック" do
13 @questionnaire.should be_valid
17 @questionnaire.name = nil
18 @questionnaire.should_not be_valid
20 @questionnaire.name = "a" * 300
21 @questionnaire.should be_valid
22 @questionnaire.name = "a" * 301
23 @questionnaire.should_not be_valid
27 @questionnaire.content = nil
28 @questionnaire.should_not be_valid
33 @questionnaire.questions = []
34 @questionnaire.should_not be_valid
39 @questionnaire.questions[0].position = 2
40 @questionnaire.should_not be_valid
44 @questionnaire.questions[1].content = nil
45 @questionnaire.should_not be_valid
49 @questionnaire.questions[1].content = "a" * 100000
50 @questionnaire.should be_valid
51 @questionnaire.questions[1].content = "a" * 100001
52 @questionnaire.should_not be_valid
55 it "質問形式が選択されていません" do
57 @questionnaire.questions[1].question_choices[0] = QuestionChoice.new
58 @questionnaire.should_not be_valid
62 #このチェックはformatがCHECKBO||RADIOBUTTONの場合のみ
63 @questionnaire.questions[1].question_choices[0] = QuestionChoice.new(:format=>QuestionChoice::CHECKBOX)
69 @questionnaire.questions.should be_empty
71 @questionnaire.init_data
73 @questionnaire.questions.size.should == Questionnaire::QUESTION_COUNT
74 @questionnaire.questions.each_with_index do |question,i|
75 question.content.should be_nil
76 question.position.should == i+1
77 question.question_choices.size.should == Questionnaire::QUESTION_CHOICE_COUNT
78 question.question_choices.each_with_index do |choice,i|
79 choice.content.should be_nil
80 choice.format.should be_nil
81 choice.position.should == i+1
87 @questionnaire = questionnaires(:questionnaire_id_9)
88 cnt_questions = Question.find(:all,:conditions=>["questionnaire_id = ?",@questionnaire.id]).size
89 @questionnaire.questions.size.should == cnt_questions
90 question_ids = @questionnaire.questions.map {|question| question.id}
91 @questionnaire.questions.each do |question|
92 question.question_choices.size.should == QuestionChoice.find(:all,:conditions=>["question_id = ?",question.id]).size
95 questions = @questionnaire.get_show_questions_data
98 #1.questionsのサイズはQuestionnaire::QUESTION_COUNTである
99 questions.size.should == Questionnaire::QUESTION_COUNT
100 questions.each_with_index do |question,i|
101 #2.DBに登録されていない分は選択肢を新しく追加
103 question.content.should be_nil
104 question.position.should == i+1
106 #3.questionごとにquestion_choices.sizeがQuestionnaire::QUESTION_CHOICE_COUNTである
107 question.question_choices.size.should == Questionnaire::QUESTION_CHOICE_COUNT
108 question.question_choices.each_with_index do |choice,i|
109 #4.DBに登録されていない分は選択肢を新しく追加
111 choice.content.should be_nil
112 choice.format.should be_nil
113 choice.position.should == i+1
118 describe "CSVダウンロード" do
120 actual_titles,actual_datas = getCsv(Questionnaire.csv(questionnaires(:questionnaire_id_1).id, Questionnaire::QUESTION_COUNT))
123 act = actual_titles.sort
124 ext = Questionnaire.get_csv_header(Questionnaire::QUESTION_COUNT).sort
127 columns = ["id", "customer_family_name", "customer_first_name", "customer_family_name_kana", "customer_first_name_kana", "customer_id",
128 "zipcode01", "zipcode02", "prefecture_name", "address_city", "address_details", "tel01", "tel02", "tel03",
129 "created_at", "email"]
131 actual_datas.should == convert(questionnaires(:questionnaire_id_1).questionnaire_answers,columns)
136 #=============================================
139 @questionnaire.name = "テストコード"
140 @questionnaire.content = "テストコードです"
141 @questionnaire.operation = false
144 3.times do |question_idx|
145 question = Question.new(:content=>"アンケートテスト", :position=>question_idx+1)
146 2.times do |choice_idx|
147 question.question_choices << QuestionChoice.new(:content=>"アンケートテストです",:format=>choice_idx+1, :position=>choice_idx+1)
149 @questionnaire.questions << question
152 #fixturesデータをCSV形式に変換(比較用)
153 def convert(questionnaire_answers, columns)
155 questionnaire_answers.each do |qa|
159 #questionnaire_answer.created_atとquestionnaire_answer[created_at]の結果が違うので特別処理
161 arr << (qa.created_at.nil? ? "" : qa.created_at.strftime('%Y-%m-%d %H:%M:%S'))
163 arr << (qa[c].nil? ? "" : qa[c].to_s)
167 Questionnaire::QUESTION_COUNT.times do |i|
168 arr << (qa.question_answers[i].nil? ? "" : qa.question_answers[i].answer.to_s)
170 datas << arr.join(",").split(",")
174 #CSVダウンロードデータを比較用データに変換
181 datas.split("\n").each_with_index do |d,i|
183 actual_titles = d.split(/\s*,\s*/)
185 actual_datas << d.split(/\s*,\s*/)
188 return actual_titles ,actual_datas