tasuku 0.1.1 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (87) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +4 -4
  3. data/app/controllers/tasuku/taskables/code/responses_controller.rb +32 -0
  4. data/app/controllers/tasuku/taskables/questions/answers_controller.rb +1 -0
  5. data/app/helpers/tasuku/url_helper.rb +11 -0
  6. data/app/models/tasuku/task.rb +1 -0
  7. data/app/models/tasuku/task_requirement.rb +5 -0
  8. data/app/models/tasuku/taskables/code/request.rb +7 -0
  9. data/app/models/tasuku/taskables/code/response.rb +22 -0
  10. data/app/models/tasuku/taskables/code.rb +7 -0
  11. data/app/models/tasuku/taskables/question/option.rb +1 -0
  12. data/app/views/tasuku/taskables/_illustration.html.erb +7 -0
  13. data/app/views/tasuku/taskables/code/requests/_request.html.erb +9 -0
  14. data/app/views/tasuku/taskables/code/responses/_form.html.erb +5 -0
  15. data/app/views/tasuku/taskables/image/requests/_request.html.erb +1 -3
  16. data/app/views/tasuku/taskables/questions/_question.html.erb +2 -3
  17. data/app/views/tasuku/taskables/questions/answers/_form.html.erb +3 -1
  18. data/app/views/tasuku/taskables/text/requests/_request.html.erb +1 -3
  19. data/app/views/tasuku/taskables/url/requests/_request.html.erb +1 -3
  20. data/config/locales/en.yml +155 -11
  21. data/config/locales/nb.yml +14 -4
  22. data/config/routes.rb +6 -0
  23. data/db/migrate/20140611084458_add_video_urls.rb +8 -0
  24. data/db/migrate/20140813073552_create_tasuku_taskables_code_requests.rb +10 -0
  25. data/db/migrate/20140813075643_create_tasuku_taskables_code_responses.rb +11 -0
  26. data/db/migrate/20140813080116_add_reply_to_option.rb +5 -0
  27. data/db/migrate/20140910112050_create_tasuku_task_requirements.rb +10 -0
  28. data/db/migrate/20140926105940_add_description_to_code_requests.rb +5 -0
  29. data/lib/tasuku/concerns/illustratable.rb +3 -0
  30. data/lib/tasuku/concerns/models/requirables/inverse_requirable.rb +12 -0
  31. data/lib/tasuku/concerns/models/requirables/requirable.rb +35 -0
  32. data/lib/tasuku/concerns/models/requirables.rb +4 -0
  33. data/lib/tasuku/concerns/models/taskables/code/request.rb +19 -0
  34. data/lib/tasuku/concerns/models/taskables/code.rb +3 -0
  35. data/lib/tasuku/concerns/models/taskables.rb +1 -0
  36. data/lib/tasuku/concerns/models.rb +1 -0
  37. data/lib/tasuku/seeds.rb +3 -0
  38. data/lib/tasuku/version.rb +1 -1
  39. data/spec/controllers/tasuku/taskables/code/responses_controller_spec.rb +38 -0
  40. data/spec/controllers/tasuku/taskables/questions/answers_controller_spec.rb +21 -0
  41. data/spec/dummy/app/controllers/application_controller.rb +1 -0
  42. data/spec/dummy/config/routes.rb +2 -1
  43. data/spec/dummy/db/development.sqlite3 +0 -0
  44. data/spec/dummy/db/schema.rb +30 -1
  45. data/spec/dummy/db/seeds.rb +1 -1
  46. data/spec/dummy/db/test.sqlite3 +0 -0
  47. data/spec/dummy/log/development.log +7584 -57
  48. data/spec/dummy/log/test.log +37002 -13558
  49. data/spec/dummy/public/uploads/{tasks/taskables/image/request/image/1 → tasuku/taskables/image/request/image/2}/doge.jpg +0 -0
  50. data/spec/dummy/public/uploads/{tasks/taskables/image/response/image/1 → tasuku/taskables/question/image/2}/doge.jpg +0 -0
  51. data/spec/dummy/public/uploads/{tasks/taskables/question/image/1 → tasuku/taskables/text/request/image/2}/doge.jpg +0 -0
  52. data/spec/dummy/public/uploads/{tasks/taskables/text/request/image/1 → tasuku/taskables/url/request/image/2}/doge.jpg +0 -0
  53. data/spec/dummy/tmp/cache/assets/development/sprockets/13fe41fee1fe35b49d145bcc06610705 +0 -0
  54. data/spec/dummy/tmp/cache/assets/development/sprockets/2f5173deea6c795b8fdde723bb4b63af +0 -0
  55. data/spec/dummy/tmp/cache/assets/development/sprockets/357970feca3ac29060c1e3861e2c0953 +0 -0
  56. data/spec/dummy/tmp/cache/assets/development/sprockets/cffd775d018f68ce5dba1ee0d951a994 +0 -0
  57. data/spec/dummy/tmp/cache/assets/development/sprockets/d771ace226fc8215a3572e0aa35bb0d6 +0 -0
  58. data/spec/dummy/tmp/cache/assets/development/sprockets/f7cbd26ba1d28d48de824f0e94586655 +0 -0
  59. data/spec/factories/tasuku_responses.rb +6 -0
  60. data/spec/factories/tasuku_task_requirements.rb +8 -0
  61. data/spec/factories/tasuku_taskables_code_requests.rb +8 -0
  62. data/spec/factories/tasuku_taskables_code_responses.rb +6 -0
  63. data/spec/factories/tasuku_taskables_question_options.rb +1 -0
  64. data/spec/models/tasuku/task_requirement_spec.rb +9 -0
  65. data/spec/models/tasuku/task_spec.rb +42 -0
  66. data/spec/models/tasuku/taskables/code/request_spec.rb +6 -0
  67. data/spec/models/tasuku/taskables/code/response_spec.rb +27 -0
  68. data/spec/spec_helper.rb +4 -0
  69. data/spec/support/shared_examples_for_redirectable.rb +9 -0
  70. data/spec/views/tasuku/taskables/code/requests/_request.html.erb_spec.rb +5 -0
  71. data/spec/views/tasuku/taskables/illustration_spec.rb +19 -0
  72. data/spec/views/tasuku/taskables/image/requests/_request.html.erb_spec.rb +8 -9
  73. data/spec/views/tasuku/taskables/questions/_question.html.erb_spec.rb +8 -9
  74. data/spec/views/tasuku/taskables/text/requests/_request.html.erb_spec.rb +8 -9
  75. data/spec/views/tasuku/taskables/url/requests/_request.html.erb_spec.rb +8 -9
  76. metadata +110 -31
  77. data/lib/tasks/concerns/models/taskables/image.rb +0 -3
  78. data/lib/tasks/concerns/models/taskables/text.rb +0 -3
  79. data/lib/tasks/concerns/models/taskables/url.rb +0 -3
  80. data/lib/tasks/concerns/models/taskables.rb +0 -7
  81. data/lib/tasks/concerns/models.rb +0 -4
  82. data/spec/dummy/public/uploads/tasks/taskables/url/request/image/1/doge.jpg +0 -0
  83. data/spec/dummy/public/uploads/tmp/1402401935-55786-0961/doge.jpg +0 -0
  84. data/spec/dummy/public/uploads/tmp/1402401935-55786-2854/doge.jpg +0 -0
  85. data/spec/dummy/public/uploads/tmp/1402402180-56033-5455/doge.jpg +0 -0
  86. data/spec/dummy/public/uploads/tmp/1402402180-56033-5512/doge.jpg +0 -0
  87. data/spec/factories/tasks_taskables_taskable_responses.rb +0 -8
@@ -0,0 +1,6 @@
1
+ FactoryGirl.define do
2
+ factory :tasuku_response, aliases: [:response], class: 'Tasuku::Taskables::Taskable::Response' do
3
+ association :author, factory: :author
4
+ association :task, factory: :task
5
+ end
6
+ end
@@ -0,0 +1,8 @@
1
+ # Read about factories at https://github.com/thoughtbot/factory_girl
2
+
3
+ FactoryGirl.define do
4
+ factory :tasuku_task_requirement, aliases: [:task_requirement], class: 'Tasuku::TaskRequirement' do
5
+ association :task, factory: :task
6
+ association :requirement, factory: :task
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ # Read about factories at https://github.com/thoughtbot/factory_girl
2
+
3
+ FactoryGirl.define do
4
+ factory :tasuku_taskables_code_request, aliases: [:code_request], class: 'Tasuku::Taskables::Code::Request' do
5
+ text "Enter the code"
6
+ code "1337"
7
+ end
8
+ end
@@ -0,0 +1,6 @@
1
+ # Read about factories at https://github.com/thoughtbot/factory_girl
2
+
3
+ FactoryGirl.define do
4
+ factory :tasuku_taskables_code_response, aliases: [:code_response], class: 'Tasuku::Taskables::Code::Response' do
5
+ end
6
+ end
@@ -5,6 +5,7 @@ require 'faker'
5
5
  FactoryGirl.define do
6
6
  factory :tasuku_taskables_question_option, aliases: [:question_option], class: 'Tasuku::Taskables::Question::Option' do
7
7
  text Faker::Lorem.word
8
+ reply Faker::Lorem.word
8
9
  question nil
9
10
  end
10
11
  end
@@ -0,0 +1,9 @@
1
+ require 'spec_helper'
2
+
3
+ module Tasuku
4
+ describe TaskRequirement do
5
+ it "has valid facoty" do
6
+ expect(build :task_requirement).to be_valid
7
+ end
8
+ end
9
+ end
@@ -13,5 +13,47 @@ module Tasuku
13
13
  expect(Tasuku::Task.completed_by(user)).to eq([task])
14
14
  end
15
15
  end
16
+
17
+ describe "Requirements" do
18
+ let!(:user) { create :user }
19
+ let!(:task) { create(:task) }
20
+ let!(:required_task) { create(:task) }
21
+
22
+ context "with requirements for task" do
23
+ let!(:requirement) { create :task_requirement, task: task, requirement: required_task }
24
+
25
+ context "without accomplished requirement" do
26
+ describe "#locked?" do
27
+ it "returns true" do
28
+ expect(task.locked? user).to be_true
29
+ end
30
+ end
31
+
32
+ describe "#locked_by_tasks" do
33
+ it "returns list of tasks to acomplish" do
34
+ expect(task.locked_by_tasks user).to eq([required_task])
35
+ end
36
+ end
37
+ end
38
+
39
+ context "with accomplished requirement" do
40
+ let!(:response) { create :response, author: user, task: required_task }
41
+
42
+ describe "#locked?" do
43
+ it "returns false" do
44
+ expect(task.locked? user).to be_false
45
+ end
46
+ end
47
+
48
+ describe "#locked_by_tasks" do
49
+ it "returns empty list" do
50
+ expect(task.locked_by_tasks user).to be_empty
51
+ end
52
+ end
53
+ end
54
+
55
+ end
56
+ end
57
+
16
58
  end
17
59
  end
@@ -0,0 +1,6 @@
1
+ require 'spec_helper'
2
+
3
+ module Tasuku
4
+ describe Taskables::Code::Request do
5
+ end
6
+ end
@@ -0,0 +1,27 @@
1
+ require 'spec_helper'
2
+
3
+ module Tasuku
4
+ describe Taskables::Code::Response do
5
+ let(:request) { create :code_request, code: '1337' }
6
+ let(:user) { create :user }
7
+
8
+ describe 'validations' do
9
+ context 'with an invalid code' do
10
+ let(:response) { build :code_response, author: user, request: request, code: '0000' }
11
+
12
+ it 'is not valid' do
13
+ expect(response).not_to be_valid
14
+ end
15
+ end
16
+
17
+ context 'with a valid code' do
18
+ let(:response) { build :code_response, author: user, request: request, code: '1337' }
19
+
20
+ it 'is valid' do
21
+ expect(response).to be_valid
22
+ end
23
+ end
24
+ end
25
+
26
+ end
27
+ end
data/spec/spec_helper.rb CHANGED
@@ -4,6 +4,9 @@ require File.expand_path("../dummy/config/environment.rb", __FILE__)
4
4
  require 'rspec/rails'
5
5
  require 'rspec/autorun'
6
6
  require 'factory_girl_rails'
7
+ require 'coveralls'
8
+
9
+ Coveralls.wear!
7
10
 
8
11
  Rails.backtrace_cleaner.remove_silencers!
9
12
 
@@ -21,6 +24,7 @@ RSpec.configure do |config|
21
24
 
22
25
  config.include FactoryGirl::Syntax::Methods
23
26
  config.include ActionDispatch::TestProcess
27
+ config.include Rails.application.routes.url_helpers
24
28
 
25
29
  config.fixture_path = "#{File.dirname(__FILE__)}/fixtures"
26
30
  end
@@ -33,5 +33,14 @@ shared_examples 'redirectable' do
33
33
  expect(response).to redirect_to after_completion_path
34
34
  end
35
35
  end
36
+
37
+ context 'with application route' do
38
+ before { expect(subject).to receive(:after_completion_path_for).and_return test_path }
39
+
40
+ it 'redirects to the configured url' do
41
+ send(verb, action, params)
42
+ expect(response).to redirect_to test_path
43
+ end
44
+ end
36
45
  end
37
46
  end
@@ -0,0 +1,5 @@
1
+ require 'spec_helper'
2
+ require 'views/tasuku/taskables/illustration_spec'
3
+
4
+ describe 'tasuku/taskables/code/requests/_request.html.erb' do
5
+ end
@@ -0,0 +1,19 @@
1
+ shared_examples 'illustrations' do
2
+ it 'renders the image' do
3
+ expect(rendered).to have_xpath "//img[contains(@src, \"#{request.image.url}\")]"
4
+ end
5
+
6
+ it 'renders the video' do
7
+ expect(rendered).to have_xpath "//div[@class='video']"
8
+ end
9
+ end
10
+
11
+ shared_examples 'no illustrations' do
12
+ it 'does not render an image' do
13
+ expect(rendered).not_to have_xpath "//img"
14
+ end
15
+
16
+ it 'does not render a video' do
17
+ expect(rendered).not_to have_xpath "//div[@class='video']"
18
+ end
19
+ end
@@ -1,10 +1,11 @@
1
1
  require 'spec_helper'
2
+ require 'views/tasuku/taskables/illustration_spec'
2
3
 
3
4
  describe 'tasuku/taskables/image/requests/_request.html.erb' do
4
5
  let(:user) { create :user }
5
6
 
6
- context 'for image requests that have an image' do
7
- let(:image_request) { create :image_request, image: fixture("doge.jpg") }
7
+ context 'for image requests that have picture or video' do
8
+ let(:image_request) { create :image_request, image: fixture("doge.jpg"), video_url: 'https://www.youtube.com/watch?v=z9Uz1icjwrM' }
8
9
 
9
10
  before do
10
11
  render partial: 'tasuku/taskables/image/requests/request.html.erb', locals: {
@@ -13,12 +14,11 @@ describe 'tasuku/taskables/image/requests/_request.html.erb' do
13
14
  }
14
15
  end
15
16
 
16
- it 'renders the image' do
17
- expect(rendered).to have_xpath "//img[contains(@src, \"#{image_request.image.url}\")]"
18
- end
17
+ alias_method :request, :image_request
18
+ it_behaves_like 'illustrations'
19
19
  end
20
20
 
21
- context 'for image requests that have no image' do
21
+ context 'for image requests that have no image or video' do
22
22
  let(:image_request) { create :image_request }
23
23
 
24
24
  before do
@@ -28,8 +28,7 @@ describe 'tasuku/taskables/image/requests/_request.html.erb' do
28
28
  }
29
29
  end
30
30
 
31
- it 'does not renders an image' do
32
- expect(rendered).not_to have_xpath "//img"
33
- end
31
+ alias_method :request, :image_request
32
+ it_behaves_like 'no illustrations'
34
33
  end
35
34
  end
@@ -1,10 +1,11 @@
1
1
  require 'spec_helper'
2
+ require 'views/tasuku/taskables/illustration_spec'
2
3
 
3
4
  describe 'tasuku/taskables/questions/_question.html.erb' do
4
5
  let(:user) { create :user }
5
6
 
6
- context 'for questions that have an image' do
7
- let(:question) { create :question_with_options, image: fixture("doge.jpg") }
7
+ context 'for questions that have an image or video' do
8
+ let(:question) { create :question_with_options, image: fixture("doge.jpg"), video_url: 'https://www.youtube.com/watch?v=z9Uz1icjwrM' }
8
9
 
9
10
  before do
10
11
  render partial: 'tasuku/taskables/questions/question.html.erb', locals: {
@@ -13,12 +14,11 @@ describe 'tasuku/taskables/questions/_question.html.erb' do
13
14
  }
14
15
  end
15
16
 
16
- it 'renders the image' do
17
- expect(rendered).to have_xpath "//img[contains(@src, \"#{question.image.url}\")]"
18
- end
17
+ alias_method :request, :question
18
+ it_behaves_like 'illustrations'
19
19
  end
20
20
 
21
- context 'for questions that have no image' do
21
+ context 'for questions that have no image or video' do
22
22
  let(:question) { create :question_with_options }
23
23
 
24
24
  before do
@@ -28,8 +28,7 @@ describe 'tasuku/taskables/questions/_question.html.erb' do
28
28
  }
29
29
  end
30
30
 
31
- it 'does not renders an image' do
32
- expect(rendered).not_to have_xpath "//img"
33
- end
31
+ alias_method :request, :question
32
+ it_behaves_like 'no illustrations'
34
33
  end
35
34
  end
@@ -1,10 +1,11 @@
1
1
  require 'spec_helper'
2
+ require 'views/tasuku/taskables/illustration_spec'
2
3
 
3
4
  describe 'tasuku/taskables/text/requests/_request.html.erb' do
4
5
  let(:user) { create :user }
5
6
 
6
- context 'for text requests that have an image' do
7
- let(:text_request) { create :text_request, image: fixture("doge.jpg") }
7
+ context 'for text requests that have an image or video' do
8
+ let(:text_request) { create :text_request, image: fixture("doge.jpg"), video_url: 'https://www.youtube.com/watch?v=z9Uz1icjwrM' }
8
9
 
9
10
  before do
10
11
  render partial: 'tasuku/taskables/text/requests/request.html.erb', locals: {
@@ -13,12 +14,11 @@ describe 'tasuku/taskables/text/requests/_request.html.erb' do
13
14
  }
14
15
  end
15
16
 
16
- it 'renders the image' do
17
- expect(rendered).to have_xpath "//img[contains(@src, \"#{text_request.image.url}\")]"
18
- end
17
+ alias_method :request, :text_request
18
+ it_behaves_like 'illustrations'
19
19
  end
20
20
 
21
- context 'for text requests that have no image' do
21
+ context 'for text requests that have no image or video' do
22
22
  let(:text_request) { create :text_request }
23
23
 
24
24
  before do
@@ -28,8 +28,7 @@ describe 'tasuku/taskables/text/requests/_request.html.erb' do
28
28
  }
29
29
  end
30
30
 
31
- it 'does not renders an image' do
32
- expect(rendered).not_to have_xpath "//img"
33
- end
31
+ alias_method :request, :text_request
32
+ it_behaves_like 'no illustrations'
34
33
  end
35
34
  end
@@ -1,10 +1,11 @@
1
1
  require 'spec_helper'
2
+ require 'views/tasuku/taskables/illustration_spec'
2
3
 
3
4
  describe 'tasuku/taskables/url/requests/_request.html.erb' do
4
5
  let(:user) { create :user }
5
6
 
6
- context 'for url requests that have an image' do
7
- let(:url_request) { create :url_request, image: fixture("doge.jpg") }
7
+ context 'for url requests that have an image or video' do
8
+ let(:url_request) { create :url_request, image: fixture("doge.jpg"), video_url: 'https://www.youtube.com/watch?v=z9Uz1icjwrM' }
8
9
 
9
10
  before do
10
11
  render partial: 'tasuku/taskables/url/requests/request.html.erb', locals: {
@@ -13,12 +14,11 @@ describe 'tasuku/taskables/url/requests/_request.html.erb' do
13
14
  }
14
15
  end
15
16
 
16
- it 'renders the image' do
17
- expect(rendered).to have_xpath "//img[contains(@src, \"#{url_request.image.url}\")]"
18
- end
17
+ alias_method :request, :url_request
18
+ it_behaves_like 'illustrations'
19
19
  end
20
20
 
21
- context 'for url requests that have no image' do
21
+ context 'for url requests that have no image or video' do
22
22
  let(:url_request) { create :url_request }
23
23
 
24
24
  before do
@@ -28,8 +28,7 @@ describe 'tasuku/taskables/url/requests/_request.html.erb' do
28
28
  }
29
29
  end
30
30
 
31
- it 'does not renders an image' do
32
- expect(rendered).not_to have_xpath "//img"
33
- end
31
+ alias_method :request, :url_request
32
+ it_behaves_like 'no illustrations'
34
33
  end
35
34
  end