poptart 0.0.13 → 0.0.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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