poptart 0.0.13 → 0.0.14

Sign up to get free protection for your applications and to get access to all the features.
Files changed (54) hide show
  1. checksums.yaml +4 -4
  2. data/.ruby-version +1 -1
  3. data/lib/poptart.rb +1 -4
  4. data/lib/poptart/link.rb +9 -0
  5. data/lib/poptart/model.rb +13 -29
  6. data/lib/poptart/question.rb +21 -17
  7. data/lib/poptart/root.rb +10 -1
  8. data/lib/poptart/survey.rb +34 -7
  9. data/lib/poptart/survey_question.rb +32 -12
  10. data/lib/poptart/user.rb +4 -21
  11. data/lib/version.rb +1 -1
  12. data/poptart.gemspec +0 -4
  13. data/spec/lib/poptart/model_spec.rb +95 -0
  14. data/spec/lib/poptart/question_spec.rb +47 -0
  15. data/spec/lib/poptart/root_spec.rb +50 -0
  16. data/spec/lib/poptart/survey_question_spec.rb +166 -0
  17. data/spec/lib/poptart/survey_spec.rb +105 -0
  18. data/spec/lib/poptart/user_spec.rb +45 -0
  19. data/spec/requests/questions_spec.rb +31 -0
  20. data/spec/requests/survey_questions_spec.rb +150 -0
  21. data/spec/requests/surveys_spec.rb +34 -5
  22. data/spec/requests/{user_management_spec.rb → users_spec.rb} +5 -5
  23. data/spec/spec_helper.rb +1 -4
  24. data/spec/vcr/answering/survey_questions_answers_a_multiple_choice_question.yml +1527 -1596
  25. data/spec/vcr/answering/survey_questions_answers_a_survey_question.yml +2942 -2035
  26. data/spec/vcr/answering/survey_questions_creates_and_returns_a_random_question_survey.yml +254 -70
  27. data/spec/vcr/answering/survey_questions_creates_and_returns_an_empty_survey.yml +110 -48
  28. data/spec/vcr/answering/survey_questions_finds_survey_question_for_id.yml +1618 -286
  29. data/spec/vcr/poptart/survey/adds_a_question_to_a_survey.yml +1939 -0
  30. data/spec/vcr/poptart/survey/creates_a_random_survey.yml +318 -0
  31. data/spec/vcr/poptart/survey/creates_an_empty_survey.yml +702 -0
  32. data/spec/vcr/poptart/survey/returns_a_survey_by_id.yml +618 -0
  33. data/spec/vcr/poptart/user/creates_a_user.yml +179 -0
  34. data/spec/vcr/{user/management_creates_a_user.yml → poptart/user/returns_a_user.yml} +72 -69
  35. data/spec/vcr/questions/creates_a_question.yml +186 -0
  36. data/spec/vcr/questions/finds_a_question_by_id.yml +326 -0
  37. data/spec/vcr/questions/finds_a_question_by_key.yml +144 -0
  38. data/spec/vcr/questions/returns_all_answered_survey_questions_for_a_question.yml +1021 -0
  39. data/spec/vcr/retrieving/answers_returns_all_answered_survey_questions_for_a_question.yml +533 -479
  40. data/spec/vcr/survey/questions_answers_a_multiple_choice_question.yml +1454 -0
  41. data/spec/vcr/survey/questions_answers_a_survey_question.yml +1772 -0
  42. data/spec/vcr/survey/questions_creates_and_returns_an_empty_survey.yml +372 -0
  43. data/spec/vcr/survey/questions_finds_survey_question_for_id.yml +3083 -0
  44. data/spec/vcr/survey/questions_returns_all_answered_survey_questions_for_a_question.yml +5756 -0
  45. data/spec/vcr/survey/questions_returns_all_answered_survey_questions_for_a_question_by_key.yml +973 -0
  46. data/spec/vcr/survey/questions_returns_all_answered_survey_questions_for_a_survey.yml +620 -0
  47. metadata +55 -72
  48. data/lib/poptart/boolean_question.rb +0 -14
  49. data/lib/poptart/multiple_response_question.rb +0 -9
  50. data/lib/poptart/range_question.rb +0 -9
  51. data/lib/poptart/time_question.rb +0 -9
  52. data/spec/requests/answering_survey_questions_spec.rb +0 -79
  53. data/spec/requests/answers_spec.rb +0 -45
  54. data/spec/requests/creating_questions_spec.rb +0 -30
@@ -0,0 +1,47 @@
1
+ require 'spec_helper'
2
+
3
+ describe Poptart::Question do
4
+ context '.create' do
5
+ it 'returns a created question' do
6
+ response = {
7
+ 'text' => 'Do you like poptarts?',
8
+ 'question_type' => 'boolean',
9
+ 'responses' => ['Yes', 'No'],
10
+ 'key' => 'poptarts'
11
+ }
12
+
13
+ root = double(:root, url: 'questions_url')
14
+ allow(Poptart::Question).to receive(:root).and_return(root)
15
+ allow(Poptart::Question).to receive(:post).and_return(response)
16
+
17
+ question = Poptart::Question.create('Do you like poptarts?',
18
+ question_type: 'boolean',
19
+ responses: ['Yes', 'No'],
20
+ key: 'poptarts')
21
+
22
+ expect(root).to have_received(:url).with(relation: 'questions', method: 'POST')
23
+ expect(Poptart::Question).
24
+ to have_received(:post).
25
+ with('questions_url', 'question' => a_hash_including(response))
26
+ expect(question.responses).to eq(['Yes', 'No'])
27
+ expect(question.question_type).to eq('boolean')
28
+ expect(question.text).to eq('Do you like poptarts?')
29
+ expect(question.key).to eq('poptarts')
30
+ end
31
+ end
32
+
33
+ context '.find' do
34
+ it 'finds question' do
35
+ response = { 'id' => 1 }
36
+
37
+ root = double(:root, url: 'questions_url')
38
+ allow(Poptart::Question).to receive(:root).and_return(root)
39
+ allow(Poptart::Question).to receive(:get).and_return(response)
40
+
41
+ question = Poptart::Question.find(1)
42
+
43
+ expect(root).to have_received(:url).with(relation: 'questions', id: 1)
44
+ expect(question.id).to eq(1)
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,50 @@
1
+ require 'spec_helper'
2
+
3
+ describe Poptart::Root do
4
+ context '#url' do
5
+ it 'returns GET url by relation' do
6
+ root = Poptart::Root.new('_links' => [{
7
+ 'rel' => 'survey_questions',
8
+ 'href' => 'http://example.com{?query*}',
9
+ 'method' => 'GET'
10
+ },
11
+ {
12
+ 'rel' => 'survey_questions',
13
+ 'href' => 'http://example.com/poptarts{?query*}',
14
+ 'method' => 'POST'
15
+ },
16
+ ])
17
+
18
+ expect(root.url(relation: 'survey_questions')).to eq('http://example.com')
19
+ expect(root.url(
20
+ relation: 'survey_questions',
21
+ method: 'POST')
22
+ ).to eq('http://example.com/poptarts')
23
+ end
24
+
25
+ it 'returns GET url by relation' do
26
+ root = Poptart::Root.new('_links' => [{
27
+ 'rel' => 'survey_questions',
28
+ 'href' => 'http://example.com{?query*}',
29
+ 'method' => 'GET'
30
+ }])
31
+
32
+ expect(root.url(relation: 'survey_questions')).to eq('http://example.com')
33
+ end
34
+
35
+ it 'returns url with query params' do
36
+ root = Poptart::Root.new('_links' => [{
37
+ 'rel' => 'survey_questions',
38
+ 'href' => 'http://example.com/{survey_id}/{id}{?query*}',
39
+ 'method' => 'GET'
40
+ }])
41
+
42
+ expect(root.url(
43
+ relation: 'survey_questions',
44
+ survey_id: 'survey_id',
45
+ id: 'id',
46
+ query: { flavor: 'strawberry'}
47
+ )).to eq('http://example.com/survey_id/id?flavor=strawberry')
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,166 @@
1
+ require 'spec_helper'
2
+
3
+ describe Poptart::SurveyQuestion do
4
+ context 'attributes' do
5
+ it 'returns question id' do
6
+ survey_question = Poptart::SurveyQuestion.new('question_id' => 1)
7
+ expect(survey_question.question_id).to eq(1)
8
+ end
9
+
10
+ it 'returns text' do
11
+ survey_question = Poptart::SurveyQuestion.new('text' => 'poptarts')
12
+ expect(survey_question.text).to eq('poptarts')
13
+ end
14
+
15
+ it 'returns responses' do
16
+ survey_question = Poptart::SurveyQuestion.new('responses' => ['Yes', 'No'])
17
+ expect(survey_question.responses).to eq(['Yes', 'No'])
18
+ end
19
+
20
+ it 'returns answer' do
21
+ survey_question = Poptart::SurveyQuestion.new('answer' => 'Toasted')
22
+ expect(survey_question.answer).to eq('Toasted')
23
+ end
24
+
25
+ it 'returns created at' do
26
+ survey_question = Poptart::SurveyQuestion.new('created_at' => '2014-01-01')
27
+ expect(survey_question.created_at).to eq(Date.parse('2014-01-01'))
28
+ end
29
+
30
+ it 'returns key' do
31
+ survey_question = Poptart::SurveyQuestion.new('key' => 'poptarts_key')
32
+ expect(survey_question.key).to eq('poptarts_key')
33
+ end
34
+ end
35
+
36
+ context '#boolean?' do
37
+ it 'returns true' do
38
+ survey_question = Poptart::SurveyQuestion.new('question_type' => 'boolean')
39
+ expect(survey_question.boolean?).to eq(true)
40
+ end
41
+ end
42
+
43
+ context '#multiple?' do
44
+ it 'returns true' do
45
+ survey_question = Poptart::SurveyQuestion.new('question_type' => 'multiple')
46
+ expect(survey_question.multiple?).to eq(true)
47
+ end
48
+ end
49
+
50
+ context '#range?' do
51
+ it 'returns true' do
52
+ survey_question = Poptart::SurveyQuestion.new('question_type' => 'range')
53
+ expect(survey_question.range?).to eq(true)
54
+ end
55
+ end
56
+
57
+ context '#time?' do
58
+ it 'returns true' do
59
+ survey_question = Poptart::SurveyQuestion.new('question_type' => 'time')
60
+ expect(survey_question.time?).to eq(true)
61
+ end
62
+ end
63
+
64
+ context '#answer' do
65
+ it 'returns true if answer is "t"' do
66
+ survey_question = Poptart::SurveyQuestion.new('answer' => 't')
67
+ expect(survey_question.answer).to eq(true)
68
+ end
69
+
70
+ it 'returns false if answer is "f"' do
71
+ survey_question = Poptart::SurveyQuestion.new('answer' => 'f')
72
+ expect(survey_question.answer).to eq(false)
73
+ end
74
+ end
75
+
76
+ context '#submit' do
77
+ it 'submits a survey question' do
78
+ survey_question = Poptart::SurveyQuestion.new('id' => 1, 'answer' => 'poptarts')
79
+ allow(survey_question).to receive(:url).and_return('survey_questions_url')
80
+ response = double(:response, status: 204, body: { id: 1 }.to_json)
81
+ allow(survey_question).to receive(:put).and_return(response)
82
+
83
+ submit_result = survey_question.submit
84
+
85
+ expect(survey_question).to have_received(:url).with(
86
+ relation: 'self',
87
+ method: 'PUT'
88
+ )
89
+ expect(survey_question).to have_received(:put).with(
90
+ 'survey_questions_url',
91
+ {
92
+ 'id' => 1,
93
+ 'survey_question' => {
94
+ 'answer' => 'poptarts'
95
+ }
96
+ }
97
+ )
98
+ expect(submit_result).to eq(true)
99
+ end
100
+ end
101
+
102
+ context '.find_all' do
103
+ it 'finds all survey questions by question id' do
104
+ body = {
105
+ 'survey_questions' => [{
106
+ 'text' => 'Do you like poptarts?'
107
+ }]
108
+ }
109
+ response = double(:response, body: body.to_json)
110
+
111
+ root = double(:root, url: 'survey_questions_url')
112
+ allow(Poptart::SurveyQuestion).to receive(:root).and_return(root)
113
+ allow(Poptart::SurveyQuestion).to receive(:get).and_return(response)
114
+
115
+ survey_questions = Poptart::SurveyQuestion.find_all(question_id: 1)
116
+
117
+ expect(root).to have_received(:url).with(relation: 'survey-questions-by-query', query: { question_id: 1})
118
+ expect(Poptart::SurveyQuestion).to have_received(:get).with('survey_questions_url')
119
+ expect(survey_questions.count).to eq(1)
120
+ survey_question = survey_questions.first
121
+ expect(survey_question.text).to eq('Do you like poptarts?')
122
+ end
123
+
124
+ it 'finds all survey questions by question key' do
125
+ body = {
126
+ 'survey_questions' => [{
127
+ 'text' => 'Do you like poptarts?'
128
+ }]
129
+ }
130
+ response = double(:response, body: body.to_json)
131
+
132
+ root = double(:root, url: 'survey_questions_url')
133
+ allow(Poptart::SurveyQuestion).to receive(:root).and_return(root)
134
+ allow(Poptart::SurveyQuestion).to receive(:get).and_return(response)
135
+
136
+ survey_questions = Poptart::SurveyQuestion.find_all(key: 'poptarts')
137
+
138
+ expect(root).to have_received(:url).with(relation: 'survey-questions-by-query', query: { key: 'poptarts' })
139
+ expect(Poptart::SurveyQuestion).to have_received(:get).with('survey_questions_url')
140
+ expect(survey_questions.count).to eq(1)
141
+ survey_question = survey_questions.first
142
+ expect(survey_question.text).to eq('Do you like poptarts?')
143
+ end
144
+
145
+ it 'finds all survey questions by survey' do
146
+ body = {
147
+ 'survey_questions' => [{
148
+ 'text' => 'Do you like poptarts?'
149
+ }]
150
+ }
151
+ response = double(:response, body: body.to_json)
152
+
153
+ root = double(:root, url: 'survey_questions_url')
154
+ allow(Poptart::SurveyQuestion).to receive(:root).and_return(root)
155
+ allow(Poptart::SurveyQuestion).to receive(:get).and_return(response)
156
+
157
+ survey_questions = Poptart::SurveyQuestion.find_all(survey_id: 1)
158
+
159
+ expect(root).to have_received(:url).with(relation: 'survey-questions-by-query', query: { survey_id: 1 })
160
+ expect(Poptart::SurveyQuestion).to have_received(:get).with('survey_questions_url')
161
+ expect(survey_questions.count).to eq(1)
162
+ survey_question = survey_questions.first
163
+ expect(survey_question.text).to eq('Do you like poptarts?')
164
+ end
165
+ end
166
+ end
@@ -0,0 +1,105 @@
1
+ require 'spec_helper'
2
+
3
+ describe Poptart::Survey do
4
+ context '#completed?' do
5
+ it 'returns true' do
6
+ survey = Poptart::Survey.new('completed' => true, 'survey_questions' => [])
7
+ expect(survey.completed?).to be
8
+ end
9
+ end
10
+
11
+ context '#service_user_id' do
12
+ it 'returns the service user id' do
13
+ survey = Poptart::Survey.new('service_user_id' => 1, 'survey_questions' => [])
14
+ expect(survey.service_user_id).to eq(1)
15
+ end
16
+ end
17
+
18
+ context '#survey_questions' do
19
+ it 'returns survey questions' do
20
+ survey_question_response = double(:response)
21
+ survey_question = double(:survey_question)
22
+ allow(Poptart::SurveyQuestion).to receive(:new).
23
+ with(survey_question_response).and_return(survey_question)
24
+
25
+ survey = Poptart::Survey.new('survey_questions' => [survey_question_response])
26
+ expect(survey.survey_questions.count).to eq(1)
27
+ expect(survey.survey_questions).to include(survey_question)
28
+ end
29
+ end
30
+
31
+ context '.all' do
32
+ it 'returns all surveys' do
33
+ root = double(:root, url: 'surveys_url')
34
+ response = double(:response, body: { surveys: [{ id: 1 }] }.to_json)
35
+ allow(Poptart::Survey).to receive(:root).and_return(root)
36
+ allow(Poptart::Survey).to receive(:get).and_return(response)
37
+
38
+ surveys = Poptart::Survey.all
39
+
40
+ expect(root).to have_received(:url).with(relation: 'surveys')
41
+ expect(Poptart::Survey).to have_received(:get).with('surveys_url')
42
+ expect(surveys.count).to eq(1)
43
+ expect(surveys.first).to be
44
+ expect(surveys.first.id).to eq(1)
45
+ end
46
+ end
47
+
48
+ context '.create' do
49
+ it 'creates an empty survey' do
50
+ root = double(:root, url: 'surveys_url')
51
+ response = double(:response, status: 201, body: { id: 1 }.to_json)
52
+ allow(Poptart::Survey).to receive(:root).and_return(root)
53
+ allow(Poptart::Survey).to receive(:post).and_return(response)
54
+
55
+ survey = Poptart::Survey.create
56
+
57
+ expect(root).to have_received(:url).with(relation: 'surveys', method: 'POST')
58
+ expect(Poptart::Survey).to have_received(:post).with('surveys_url')
59
+ expect(survey.id).to be
60
+ end
61
+ end
62
+
63
+ context '.find' do
64
+ it 'returns a survey' do
65
+ root = double(:root, url: 'surveys_url/1')
66
+ response = double(:response, status: 200, body: { id: 1 }.to_json)
67
+ allow(Poptart::Survey).to receive(:root).and_return(root)
68
+ allow(Poptart::Survey).to receive(:get).and_return(response)
69
+
70
+ survey = Poptart::Survey.find(1)
71
+
72
+ expect(root).to have_received(:url).with(relation: 'surveys', id: 1)
73
+ expect(Poptart::Survey).to have_received(:get).with('surveys_url/1')
74
+ expect(survey.id).to eq(1)
75
+ end
76
+ end
77
+
78
+ context '#add_survey_question' do
79
+ it 'adds a survey question to a survey' do
80
+ survey = Poptart::Survey.new({})
81
+ allow(survey).to receive(:url).and_return('survey_questions_url')
82
+
83
+ response = double(:response, status: 201, body: { 'id' => 1 }.to_json)
84
+ allow(survey).to receive(:post).and_return(response)
85
+
86
+ survey_question = Poptart::SurveyQuestion.new(
87
+ 'question_id' => 1,
88
+ 'responses' => [true, false]
89
+ )
90
+ survey_question = survey.add_survey_question(survey_question)
91
+
92
+ body = {
93
+ 'survey_question' => {
94
+ 'question_id' => 1,
95
+ 'responses' => [true, false]
96
+ }
97
+ }
98
+
99
+ expect(survey).to have_received(:url).with(relation: 'survey-questions', method: 'POST')
100
+ expect(survey).to have_received(:post).with('survey_questions_url', body)
101
+ expect(survey_question.id).to eq(1)
102
+ expect(survey.survey_questions.include?(survey_question)).to eq(true)
103
+ end
104
+ end
105
+ end
@@ -0,0 +1,45 @@
1
+ require 'spec_helper'
2
+
3
+ describe Poptart::User do
4
+ context '.new' do
5
+ it 'sets service user id' do
6
+ user = Poptart::User.new('service_user_id' => 1)
7
+ expect(user.service_user_id).to eq(1)
8
+ end
9
+
10
+ it 'sets token' do
11
+ user = Poptart::User.new('token' => 'poptart')
12
+ expect(user.token).to eq('poptart')
13
+ end
14
+ end
15
+
16
+ context '.create' do
17
+ it 'creates a user' do
18
+ root = double(:root, url: 'user_url')
19
+ user_response = { 'id' => 1 }
20
+ allow(Poptart::User).to receive(:root).and_return(root)
21
+ allow(Poptart::User).to receive(:post).and_return(user_response)
22
+
23
+ user = Poptart::User.create
24
+
25
+ expect(root).to have_received(:url).with(relation: 'users', method: 'POST')
26
+ expect(Poptart::User).to have_received(:post).with('user_url')
27
+ expect(user.id).to eq(1)
28
+ end
29
+ end
30
+
31
+ context '.get_user' do
32
+ it 'returns a user' do
33
+ root = double(:root, url: 'user_url')
34
+ user_response = { 'id' => 1 }
35
+ allow(Poptart::User).to receive(:root).and_return(root)
36
+ allow(Poptart::User).to receive(:get).and_return(user_response)
37
+
38
+ user = Poptart::User.get_user
39
+
40
+ expect(root).to have_received(:url).with(relation: 'users')
41
+ expect(Poptart::User).to have_received(:get).with('user_url')
42
+ expect(user.id).to eq(1)
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,31 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'questions' do
4
+ it 'finds a question by id', :vcr do
5
+ question = Poptart::Question.create('Do you like poptarts?',
6
+ question_type: 'boolean',
7
+ responses: [true, false],
8
+ key: 'poptarts')
9
+
10
+ question = Poptart::Question.find(question.id)
11
+
12
+ expect(question.id).to eq(question.id)
13
+ expect(question.text).to eq('Do you like poptarts?')
14
+ expect(question.responses).to eq(['t', 'f'])
15
+ expect(question.key).to eq('poptarts')
16
+ end
17
+
18
+ it 'finds a question by key', :vcr do
19
+ question = Poptart::Question.create('Do you like poptarts?',
20
+ question_type: 'boolean',
21
+ responses: [true, false],
22
+ key: 'poptarts')
23
+
24
+ question = Poptart::Question.find('poptarts')
25
+
26
+ expect(question.id).to eq(question.id)
27
+ expect(question.text).to eq('Do you like poptarts?')
28
+ expect(question.responses).to eq(['t', 'f'])
29
+ expect(question.key).to eq('poptarts')
30
+ end
31
+ end