cloudfactory 0.0.13

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 (116) hide show
  1. data/.gitignore +11 -0
  2. data/.rspec +1 -0
  3. data/Gemfile +10 -0
  4. data/README.md +44 -0
  5. data/Rakefile +40 -0
  6. data/bin/cf +8 -0
  7. data/cf.gemspec +76 -0
  8. data/example/google_translate_app/Gemfile +12 -0
  9. data/example/google_translate_app/config.ru +7 -0
  10. data/example/google_translate_app/google_translate_input.csv +4 -0
  11. data/example/google_translate_app/google_translator_app.rb +53 -0
  12. data/example/google_translate_app/views/index.haml +2 -0
  13. data/example/google_translate_app/views/layout.haml +7 -0
  14. data/example/google_translate_app/views/run.haml +4 -0
  15. data/example/google_translate_app/views/style.sass +2 -0
  16. data/example/human_worker_app/Gemfile +12 -0
  17. data/example/human_worker_app/config.ru +7 -0
  18. data/example/human_worker_app/human_worker_app.rb +55 -0
  19. data/example/human_worker_app/human_worker_input.csv +5 -0
  20. data/example/human_worker_app/public/app.js +12 -0
  21. data/example/human_worker_app/temp.csv +3 -0
  22. data/example/human_worker_app/views/index.haml +15 -0
  23. data/example/human_worker_app/views/layout.haml +10 -0
  24. data/example/human_worker_app/views/result.haml +18 -0
  25. data/example/human_worker_app/views/run.haml +12 -0
  26. data/example/human_worker_app/views/style.sass +25 -0
  27. data/example/sample_yaml_files/concept_tagging_robot.yaml +18 -0
  28. data/example/sample_yaml_files/content_scraping_robot.yaml +19 -0
  29. data/example/sample_yaml_files/entity_extraction_robot.yaml +18 -0
  30. data/example/sample_yaml_files/google_translate_robot.yaml +20 -0
  31. data/example/sample_yaml_files/image_processing_robot.yaml +20 -0
  32. data/example/sample_yaml_files/keyword_matching_and_text_extraction_robot.yaml +26 -0
  33. data/example/sample_yaml_files/mailer_robot.yaml +21 -0
  34. data/example/sample_yaml_files/media_converter_robot.yaml +21 -0
  35. data/example/sample_yaml_files/media_splitting_robot.yaml +20 -0
  36. data/example/sample_yaml_files/multiple_skill_badge.yaml +75 -0
  37. data/example/sample_yaml_files/sentiment_robot.yaml +19 -0
  38. data/example/sample_yaml_files/skill_badge.yaml +56 -0
  39. data/example/sample_yaml_files/stat_badge.yaml +40 -0
  40. data/example/sample_yaml_files/term_extraction_robot.yaml +20 -0
  41. data/example/sample_yaml_files/tournament_station_and_form_fields.yaml +40 -0
  42. data/features/form_generation.feature +46 -0
  43. data/features/form_preview.feature +98 -0
  44. data/features/line_creation.feature +99 -0
  45. data/features/line_deletion.feature +50 -0
  46. data/features/line_generation.feature +57 -0
  47. data/features/run.feature +141 -0
  48. data/features/support/cli_steps.rb +16 -0
  49. data/features/support/env.rb +23 -0
  50. data/features/target_url.feature +82 -0
  51. data/fixtures/api_credentials_example.yml +4 -0
  52. data/fixtures/input_data/media_converter_robot.csv +2 -0
  53. data/fixtures/input_data/test.csv +2 -0
  54. data/lib/cf.rb +94 -0
  55. data/lib/cf/account.rb +32 -0
  56. data/lib/cf/cli.rb +52 -0
  57. data/lib/cf/cli/config.rb +87 -0
  58. data/lib/cf/cli/form.rb +82 -0
  59. data/lib/cf/cli/line.rb +237 -0
  60. data/lib/cf/cli/production.rb +62 -0
  61. data/lib/cf/cli/templates/css_file.css.erb +22 -0
  62. data/lib/cf/cli/templates/form_preview.html.erb +17 -0
  63. data/lib/cf/cli/templates/html_file.html.erb +21 -0
  64. data/lib/cf/cli/templates/js_file.js.erb +18 -0
  65. data/lib/cf/cli/templates/line.tt +55 -0
  66. data/lib/cf/cli/templates/sample-line/form.css +27 -0
  67. data/lib/cf/cli/templates/sample-line/form.html +26 -0
  68. data/lib/cf/cli/templates/sample-line/form.js +7 -0
  69. data/lib/cf/cli/templates/sample-line/line.yml.erb +67 -0
  70. data/lib/cf/cli/templates/sample-line/sample-line.csv +3 -0
  71. data/lib/cf/client.rb +56 -0
  72. data/lib/cf/custom_task_form.rb +136 -0
  73. data/lib/cf/department.rb +24 -0
  74. data/lib/cf/final_output.rb +20 -0
  75. data/lib/cf/form_field.rb +62 -0
  76. data/lib/cf/human_worker.rb +67 -0
  77. data/lib/cf/input_format.rb +134 -0
  78. data/lib/cf/line.rb +231 -0
  79. data/lib/cf/robot_worker.rb +31 -0
  80. data/lib/cf/run.rb +158 -0
  81. data/lib/cf/station.rb +340 -0
  82. data/lib/cf/task_form.rb +147 -0
  83. data/lib/cf/version.rb +3 -0
  84. data/lib/generators/cf/form/form_generator.rb +55 -0
  85. data/lib/generators/cf/form/templates/cf_form.html.erb +11 -0
  86. data/lib/generators/cf/install/install_generator.rb +22 -0
  87. data/lib/generators/cf/install/templates/README +13 -0
  88. data/lib/generators/cf/install/templates/cloud_factory.rb +7 -0
  89. data/spec/account_spec.rb +11 -0
  90. data/spec/badge_spec.rb +88 -0
  91. data/spec/concept_tagging_robot_spec.rb +54 -0
  92. data/spec/config_spec.rb +20 -0
  93. data/spec/content_scraping_robot_spec.rb +58 -0
  94. data/spec/custom_task_form_spec.rb +190 -0
  95. data/spec/department_spec.rb +14 -0
  96. data/spec/entity_extraction_robot_spec.rb +56 -0
  97. data/spec/form_field_spec.rb +126 -0
  98. data/spec/generators/form_generator_spec.rb +60 -0
  99. data/spec/generators/install_generator_spec.rb +35 -0
  100. data/spec/google_translate_robot_spec.rb +64 -0
  101. data/spec/human_worker_spec.rb +118 -0
  102. data/spec/image_processing_robot_spec.rb +56 -0
  103. data/spec/input_format_spec.rb +113 -0
  104. data/spec/keyword_matching_and_text_extraction_robot_spec.rb +73 -0
  105. data/spec/line_spec.rb +338 -0
  106. data/spec/mailer_robot_spec.rb +62 -0
  107. data/spec/media_converter_robot_spec.rb +72 -0
  108. data/spec/media_splitting_robot_spec.rb +62 -0
  109. data/spec/run_spec.rb +298 -0
  110. data/spec/sentiment_robot_spec.rb +56 -0
  111. data/spec/spec_helper.rb +39 -0
  112. data/spec/station_spec.rb +256 -0
  113. data/spec/task_form_spec.rb +96 -0
  114. data/spec/term_extraction_robot_spec.rb +58 -0
  115. data/spec/text_appending_robot_spec.rb +86 -0
  116. metadata +472 -0
@@ -0,0 +1,56 @@
1
+ # encoding: utf-8
2
+ require 'spec_helper'
3
+
4
+ module CF
5
+ describe CF::RobotWorker do
6
+ context "create a sentiment robot worker" do
7
+ it "should create content_scraping_robot worker for first station in Block DSL way" do
8
+ # WebMock.allow_net_connect!
9
+ VCR.use_cassette "robot_worker/sentiment_robot/block/create-worker-single-station", :record => :new_episodes do
10
+ line = CF::Line.create("sentiment_robot","Digitization") do |l|
11
+ CF::InputFormat.new({:line => l, :name => "url", :valid_type => "url", :required => "true"})
12
+ CF::Station.create({:line => l, :type => "work"}) do |s|
13
+ CF::RobotWorker.create({:station => s, :settings => {:document => ["{url}"], :sanitize => true}, :type => "sentiment_robot"})
14
+ end
15
+ end
16
+ run = CF::Run.create(line, "sentiment_robot_run", [{"url"=> "http://www.thehappyguy.com/happiness-self-help-book.html"}])
17
+ output = run.final_output
18
+ output.first.final_output.first.sanitize.should eql("true")
19
+ output.first.final_output.first.sentiment_of_url.should eql("positive")
20
+ output.first.final_output.first.sentiment_relevance_of_url.should eql(24.0408)
21
+ line.stations.first.worker.class.should eql(CF::RobotWorker)
22
+ line.stations.first.worker.reward.should eql(0)
23
+ line.stations.first.worker.number.should eql(1)
24
+ line.stations.first.worker.settings.should eql({:document => ["{url}"], :sanitize => true})
25
+ line.stations.first.worker.type.should eql("SentimentRobot")
26
+ end
27
+ end
28
+
29
+ it "should create content_scraping_robot worker for first station in plain ruby way" do
30
+ # WebMock.allow_net_connect!
31
+ VCR.use_cassette "robot_worker/sentiment_robot/plain_ruby/create-worker-single-station", :record => :new_episodes do
32
+ line = CF::Line.new("sentiment_robot_1","Digitization")
33
+ input_format = CF::InputFormat.new({:name => "url", :required => true, :valid_type => "url"})
34
+ line.input_formats input_format
35
+
36
+ station = CF::Station.new({:type => "work"})
37
+ line.stations station
38
+
39
+ worker = CF::RobotWorker.new({:settings => {:document => ["{url}"], :sanitize => true}, :type => "sentiment_robot"})
40
+ line.stations.first.worker = worker
41
+
42
+ run = CF::Run.create(line, "sentiment_robot_run_1", [{"url"=> "http://www.thehappyguy.com/happiness-self-help-book.html"}])
43
+ output = run.final_output
44
+ output.first.final_output.first.sanitize.should eql("true")
45
+ output.first.final_output.first.sentiment_of_url.should eql("positive")
46
+ output.first.final_output.first.sentiment_relevance_of_url.should eql(24.0408)
47
+ line.stations.first.worker.class.should eql(CF::RobotWorker)
48
+ line.stations.first.worker.reward.should eql(0)
49
+ line.stations.first.worker.number.should eql(1)
50
+ line.stations.first.worker.settings.should eql({:document => ["{url}"], :sanitize => true})
51
+ line.stations.first.worker.type.should eql("SentimentRobot")
52
+ end
53
+ end
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,39 @@
1
+ require 'cf'
2
+ require 'vcr'
3
+ require 'webmock'
4
+
5
+ RSpec.configure do |config|
6
+ config.before(:each) do
7
+ # Configuring the defaults
8
+ # Set ENV['TEST'] is true for testing against the api
9
+ # TEST=true bundle exec rspec spec/.....
10
+ if ENV['TEST']
11
+ require 'ruby-debug'
12
+ ::Debugger.start
13
+ ::Debugger.settings[:autoeval] = true if ::Debugger.respond_to?(:settings)
14
+
15
+ API_CONFIG = YAML.load_file(File.expand_path("../../fixtures/api_credentials.yml", __FILE__))
16
+ CF.configure do |config|
17
+ config.account_name = API_CONFIG['account_name']
18
+ config.api_version = API_CONFIG['api_version']
19
+ config.api_url = API_CONFIG['api_url']
20
+ config.api_key = API_CONFIG['api_key']
21
+ end
22
+ end
23
+ end
24
+ config.filter_run :focus => true
25
+ config.filter_run_excluding :broken => true
26
+ config.run_all_when_everything_filtered = true
27
+ config.extend VCR::RSpec::Macros
28
+ # Tenant.current = Tenant.create(:host => SANDBOX)
29
+ end
30
+
31
+ # WebMock.disable_net_connect!(:allow => "sprout.lvh.me")
32
+
33
+
34
+ VCR.config do |c|
35
+ c.cassette_library_dir = 'fixtures/cassette_library'
36
+ c.stub_with :webmock
37
+ c.ignore_localhost = true
38
+ c.default_cassette_options = { :record => :none }
39
+ end
@@ -0,0 +1,256 @@
1
+ require 'spec_helper'
2
+
3
+ describe CF::Station do
4
+ context "create a station" do
5
+ it "the plain ruby way" do
6
+ # WebMock.allow_net_connect!
7
+ VCR.use_cassette "stations/plain-ruby/create", :record => :new_episodes do
8
+ line = CF::Line.new("Digitize--ard", "Digitization")
9
+ station = CF::Station.new({:type => "work"})
10
+ line.stations station
11
+ line.stations.first.type.should eql("WorkStation")
12
+ end
13
+ end
14
+
15
+ it "using the block variable" do
16
+ # WebMock.allow_net_connect!
17
+ VCR.use_cassette "stations/block/create-with-block-var", :record => :new_episodes do
18
+ line = CF::Line.create("igitizeard", "Digitization") do
19
+ CF::Station.create({:line => self, :type => "work"}) do |s|
20
+ CF::HumanWorker.new({:station => s, :number => 2, :reward => 20})
21
+ CF::TaskForm.create({:station => s, :title => "Enter text from a business card image", :instruction => "Describe"}) do |i|
22
+ CF::FormField.new({:form => i, :label => "First Name", :field_type => "SA", :required => "true"})
23
+ CF::FormField.new({:form => i, :label => "Middle Name", :field_type => "SA"})
24
+ CF::FormField.new({:form => i, :label => "Last Name", :field_type => "SA", :required => "true"})
25
+ end
26
+ end
27
+ end
28
+ line.stations.first.type.should eq("WorkStation")
29
+ line.stations.first.worker.number.should eql(2)
30
+ line.stations.first.worker.reward.should eql(20)
31
+ line.stations.first.form.title.should eq("Enter text from a business card image")
32
+ line.stations.first.form.instruction.should eq("Describe")
33
+ line.stations.first.form.form_fields[0].label.should eq("First Name")
34
+ line.stations.first.form.form_fields[1].label.should eq("Middle Name")
35
+ line.stations.first.form.form_fields[2].label.should eq("Last Name")
36
+ end
37
+ end
38
+
39
+ it "using without the block variable also creating instruction without block variable" do
40
+ # WebMock.allow_net_connect!
41
+ VCR.use_cassette "stations/block/create-without-block-var", :record => :new_episodes do
42
+ line = CF::Line.create("Digitizrd", "Digitization") do
43
+ CF::Station.create({:line => self, :type => "work"}) do
44
+ CF::HumanWorker.new({:station => self, :number => 2, :reward => 20})
45
+ CF::TaskForm.create({:station => self, :title => "Enter text from a business card image", :instruction => "Describe"}) do
46
+ CF::FormField.new({:form => self, :label => "First Name", :field_type => "SA", :required => "true"})
47
+ CF::FormField.new({:form => self, :label => "Middle Name", :field_type => "SA"})
48
+ CF::FormField.new({:form => self, :label => "Last Name", :field_type => "SA", :required => "true"})
49
+ end
50
+ end
51
+ end
52
+ line.stations.first.type.should eq("WorkStation")
53
+ line.stations.first.worker.number.should == 2
54
+ line.stations.first.worker.reward.should == 20
55
+ line.stations.first.form.title.should eq("Enter text from a business card image")
56
+ line.stations.first.form.instruction.should eq("Describe")
57
+ line.stations.first.form.form_fields[0].label.should eq("First Name")
58
+ line.stations.first.form.form_fields[1].label.should eq("Middle Name")
59
+ line.stations.first.form.form_fields[2].label.should eq("Last Name")
60
+ end
61
+ end
62
+
63
+ it "should create a station of Tournament station" do
64
+ # WebMock.allow_net_connect!
65
+ VCR.use_cassette "stations/block/tournament-station", :record => :new_episodes do
66
+ line = CF::Line.create("Digitized-9", "Digitization") do
67
+ CF::InputFormat.new({:line => self, :name => "image_url", :required => true, :valid_type => "url"})
68
+ CF::Station.create({:line => self, :type => "tournament", :jury_worker=> {:max_judges => 10}, :auto_judge => {:enabled => true}}) do |s|
69
+ CF::HumanWorker.new({:station => s, :number => 3, :reward => 20})
70
+ CF::TaskForm.create({:station => s, :title => "Enter text from a business card image", :instruction => "Describe"}) do |i|
71
+ CF::FormField.new({:form => i, :label => "First Name", :field_type => "SA", :required => "true"})
72
+ CF::FormField.new({:form => i, :label => "Middle Name", :field_type => "SA"})
73
+ CF::FormField.new({:form => i, :label => "Last Name", :field_type => "SA", :required => "true"})
74
+ end
75
+ end
76
+ end
77
+ line.stations.first.type.should eq("TournamentStation")
78
+ line.stations.first.jury_worker.should eql({:max_judges => 10})
79
+ line.stations.first.auto_judge.should eql({:enabled => true})
80
+ line.stations.first.worker.number.should eql(3)
81
+ line.stations.first.worker.reward.should eql(20)
82
+ line.stations.first.form.title.should eq("Enter text from a business card image")
83
+ line.stations.first.form.instruction.should eq("Describe")
84
+ line.stations.first.form.form_fields[0].label.should eq("First Name")
85
+ line.stations.first.form.form_fields[1].label.should eq("Middle Name")
86
+ line.stations.first.form.form_fields[2].label.should eq("Last Name")
87
+ end
88
+ end
89
+
90
+ it "should create a station of Improve station as first station of line" do
91
+ # WebMock.allow_net_connect!
92
+ VCR.use_cassette "stations/block/improve-as-first-station", :record => :new_episodes do
93
+ line = CF::Line.new("Digitd", "Digitization")
94
+ station = CF::Station.new({:type => "improve"})
95
+ expect { line.stations station }.to raise_error(CF::ImproveStationNotAllowed)
96
+ end
97
+ end
98
+ end
99
+
100
+ context "get station" do
101
+ it "should get information about a single station" do
102
+ # WebMock.allow_net_connect!
103
+ VCR.use_cassette "stations/plain-ruby/get-station", :record => :new_episodes do
104
+ line = CF::Line.new("Digitizerd1","Digitization")
105
+ line.title.should eq("Digitizerd1")
106
+ station = CF::Station.new(:type => "Work")
107
+ line.stations station
108
+ station.type.should eq("Work")
109
+ line.stations.first.get.type.should eq("WorkStation")
110
+ end
111
+ end
112
+
113
+ it "should get all existing stations of a line" do
114
+ # WebMock.allow_net_connect!
115
+ VCR.use_cassette "stations/plain-ruby/get-all-stations", :record => :new_episodes do
116
+ line = CF::Line.new("Digitizrd11","Digitization")
117
+ line.title.should eq("Digitizrd11")
118
+ station = CF::Station.new(:type => "Work")
119
+ line.stations station
120
+ stations = CF::Station.all(line)
121
+ stations[0].type.should eq("WorkStation")
122
+ end
123
+ end
124
+ end
125
+
126
+ context "create multiple station" do
127
+ xit "should create two stations with improve station" do
128
+ WebMock.allow_net_connect!
129
+ # VCR.use_cassette "stations/block/multiple-station", :record => :new_episodes do
130
+ line = CF::Line.create("Company Info -1","Digitization") do |l|
131
+ CF::InputFormat.new({:line => l, :name => "Company", :required => true, :valid_type => "general"})
132
+ CF::InputFormat.new({:line => l, :name => "Website", :required => true, :valid_type => "url"})
133
+ CF::Station.create({:line => l, :type => "work"}) do |s|
134
+ CF::HumanWorker.new({:station => s, :number => 1, :reward => 20})
135
+ CF::TaskForm.create({:station => s, :title => "Enter the name of CEO", :instruction => "Describe"}) do |i|
136
+ CF::FormField.new({:form => i, :label => "First Name", :field_type => "SA", :required => "true"})
137
+ CF::FormField.new({:form => i, :label => "Middle Name", :field_type => "SA"})
138
+ CF::FormField.new({:form => i, :label => "Last Name", :field_type => "SA", :required => "true"})
139
+ end
140
+ end
141
+ end
142
+
143
+ station = CF::Station.new({:type => "Improve"})
144
+ line.stations station
145
+
146
+ worker = CF::HumanWorker.new({:number => 1, :reward => 10})
147
+ line.stations.last.worker = worker
148
+
149
+ form = CF::TaskForm.new({:title => "Enter the address of the given Person", :instruction => "Description"})
150
+ line.stations.last.form = form
151
+
152
+ form_fields_1 = CF::FormField.new({:label => "Street", :field_type => "SA", :required => "true"})
153
+ line.stations.last.form.form_fields form_fields_1
154
+ form_fields_2 = CF::FormField.new({:label => "City", :field_type => "SA", :required => "true"})
155
+ line.stations.last.form.form_fields form_fields_2
156
+ form_fields_3 = CF::FormField.new({:label => "Country", :field_type => "SA", :required => "true"})
157
+ line.stations.last.form.form_fields form_fields_3
158
+
159
+ run = CF::Run.create(line,"Creation of Multiple Station", File.expand_path("../../fixtures/input_data/test.csv", __FILE__))
160
+ # debugger
161
+ result_of_station_1 = run.output(:station => 1)
162
+ result_of_station_2 = run.output(:station => 2)
163
+ @final_output = run.final_output
164
+ @final_output.first.meta_data['company'].should eql("Apple")
165
+ @final_output.first.final_outputs.last['street'].should eql("Kupondole")
166
+ @final_output.first.final_outputs.last['city'].should eql("Kathmandu")
167
+ @final_output.first.final_outputs.last['country'].should eql("Nepal")
168
+ # end
169
+ end
170
+ end
171
+
172
+ context "create multiple station" do
173
+ it "should create two stations using different input format" do
174
+ # WebMock.allow_net_connect!
175
+ VCR.use_cassette "stations/block/multiple-station-adding-input-format", :record => :new_episodes do
176
+ line = CF::Line.create("Company-info-214","Digitization") do |l|
177
+ CF::InputFormat.new({:line => l, :name => "Company", :required => true, :valid_type => "general"})
178
+ CF::InputFormat.new({:line => l, :name => "Website", :required => true, :valid_type => "url"})
179
+ CF::Station.create({:line => l, :type => "work", :input_formats=> {:station_0 => [{:name => "Company"},{:name => "Website", :except => true}]}}) do |s|
180
+ CF::HumanWorker.new({:station => s, :number => 1, :reward => 20})
181
+ CF::TaskForm.create({:station => s, :title => "Enter the name of CEO", :instruction => "Describe"}) do |i|
182
+ CF::FormField.new({:form => i, :label => "First Name", :field_type => "SA", :required => "true"})
183
+ CF::FormField.new({:form => i, :label => "Middle Name", :field_type => "SA"})
184
+ CF::FormField.new({:form => i, :label => "Last Name", :field_type => "SA", :required => "true"})
185
+ end
186
+ end
187
+ end
188
+
189
+ station = CF::Station.new(
190
+ {:type => "work", :input_formats => {:station_0 => [{:name => "Website"}], :station_1 => [{:name => "Last Name", :except => true}]}})
191
+ line.stations station
192
+
193
+ worker = CF::HumanWorker.new({:number => 1, :reward => 10})
194
+ line.stations.last.worker = worker
195
+
196
+ form = CF::TaskForm.new({:title => "Enter the address of the given Person", :instruction => "Description"})
197
+ line.stations.last.form = form
198
+
199
+ form_fields_1 = CF::FormField.new({:label => "Street", :field_type => "SA", :required => "true"})
200
+ line.stations.last.form.form_fields form_fields_1
201
+ form_fields_2 = CF::FormField.new({:label => "City", :field_type => "SA", :required => "true"})
202
+ line.stations.last.form.form_fields form_fields_2
203
+ form_fields_3 = CF::FormField.new({:label => "Country", :field_type => "SA", :required => "true"})
204
+ line.stations.last.form.form_fields form_fields_3
205
+ station_1 = line.stations.first.get
206
+ station_1.input_formats.count.should eql(1)
207
+ station_1.input_formats.first.name.should eql("Company")
208
+ station_1.input_formats.first.required.should eql(true)
209
+ station_1.input_formats.first.valid_type.should eql("general")
210
+ station_2 = line.stations.last.get
211
+ station_2.input_formats.count.should eql(3)
212
+ station_2.input_formats.map(&:name).should include("Website")
213
+ station_2.input_formats.map(&:name).should include("First Name")
214
+ station_2.input_formats.map(&:name).should include("Middle Name")
215
+ station_2.input_formats.map(&:required).should include(true)
216
+ station_2.input_formats.map(&:required).should include(false) #how to make it true
217
+ station_2.input_formats.map(&:required).should include(false)
218
+ station_2.input_formats.map(&:valid_type).should include("url")
219
+ station_2.input_formats.map(&:valid_type).should include("general")
220
+ station_2.input_formats.map(&:valid_type).should include("general")
221
+ end
222
+ end
223
+ end
224
+
225
+ context "create a station without passing station type" do
226
+ it "in plain ruby way and it should display an error message" do
227
+ # WebMock.allow_net_connect!
228
+ VCR.use_cassette "stations/plain-ruby/create-without-type", :record => :new_episodes do
229
+ line = CF::Line.new("Digitize--ard", "Digitization")
230
+ station = CF::Station.new()
231
+ line.stations station
232
+ line.stations.first.errors.should eql("The Station type is invalid.")
233
+ end
234
+ end
235
+
236
+ it "in block DSL way and it should display an error message" do
237
+ # WebMock.allow_net_connect!
238
+ VCR.use_cassette "stations/block/create-without-type", :record => :new_episodes do
239
+ line = CF::Line.create("Digitize--ard1", "Digitization") do |l|
240
+ CF::Station.new({:line => l})
241
+ end
242
+ line.stations.first.errors.should eql("The Station type is invalid.")
243
+ end
244
+ end
245
+
246
+ it "in block DSL way without creating input_format it should display an error message" do
247
+ # WebMock.allow_net_connect!
248
+ VCR.use_cassette "stations/block/create-without-input_type_error", :record => :new_episodes do
249
+ line = CF::Line.create("Digitize--ard2", "Digitization") do |l|
250
+ CF::Station.new({:line => l, :type => "work"})
251
+ end
252
+ line.stations.first.errors.should eql("Input formats not assigned for the line #{line.title.downcase}")
253
+ end
254
+ end
255
+ end
256
+ end
@@ -0,0 +1,96 @@
1
+ require 'spec_helper'
2
+
3
+ describe CF::TaskForm do
4
+ context "create a task_form" do
5
+ it "the plain ruby way" do
6
+ # WebMock.allow_net_connect!
7
+ VCR.use_cassette "task_form/block/create", :record => :new_episodes do
8
+ line = CF::Line.create("Digiti-ard-2", "Digitization") do
9
+ CF::InputFormat.new({:line => self, :name => "image_url", :required => true, :valid_type => "url"})
10
+ CF::Station.create({:line => self, :type => "work"}) do |station|
11
+ CF::HumanWorker.new({:station => station, :number => 2, :reward => 20})
12
+ CF::TaskForm.create({:station => station, :title => "Enter text from a business card image", :instruction => "Describe"}) do |i|
13
+ CF::FormField.new({:form => i, :label => "First Name", :field_type => "SA", :required => "true"})
14
+ CF::FormField.new({:form => i, :label => "Middle Name", :field_type => "SA"})
15
+ CF::FormField.new({:form => i, :label => "Last Name", :field_type => "SA", :required => "true"})
16
+ end
17
+ end
18
+ end
19
+ form = line.stations[0].form
20
+ form.title.should eq("Enter text from a business card image")
21
+ form.instruction.should eq("Describe")
22
+ form.form_fields.first.label.should eq("First Name")
23
+ form.form_fields.first.field_type.should eq("SA")
24
+ form.form_fields.first.required.should eq(true)
25
+ end
26
+ end
27
+
28
+ xit "with invalid data" do
29
+ WebMock.allow_net_connect!
30
+ # VCR.use_cassette "task_form/block/create", :record => :new_episodes do
31
+ line = CF::Line.create("Digiti-ard-2", "Digitization") do
32
+ CF::InputFormat.new({:line => self, :name => "image_url", :required => true, :valid_type => "url"})
33
+ CF::Station.create({:line => self, :type => "work"}) do |station|
34
+ CF::HumanWorker.new({:station => station, :number => 2, :reward => 20})
35
+ CF::TaskForm.new({:station => station})
36
+ end
37
+ end
38
+ # debugger
39
+ form = line.stations[0].form
40
+ form.instruction.should eq("Describe")
41
+ form.form_fields.first.label.should eq("First Name")
42
+ form.form_fields.first.field_type.should eq("SA")
43
+ form.form_fields.first.required.should eq(true)
44
+ # end
45
+ end
46
+ end
47
+
48
+ context "get instruction info" do
49
+ it "should get all the instruction information of a station" do
50
+ # WebMock.allow_net_connect!
51
+ VCR.use_cassette "task_form/block/get-instruction", :record => :new_episodes do
52
+ line = CF::Line.create("Digitizerdd", "Digitization") do
53
+ CF::InputFormat.new({:line => self, :name => "image_url", :required => true, :valid_type => "url"})
54
+ CF::Station.create({:line => self, :type => "work"}) do |station|
55
+ CF::HumanWorker.new({:station => station, :number => 2, :reward => 20})
56
+ CF::TaskForm.create({:station => station, :title => "Enter text from a business card image", :instruction => "Describe"}) do |i|
57
+ CF::FormField.new({:form => i, :label => "First Name", :field_type => "SA", :required => "true"})
58
+ CF::FormField.new({:form => i, :label => "Middle Name", :field_type => "SA"})
59
+ CF::FormField.new({:form => i, :label => "Last Name", :field_type => "SA", :required => "true"})
60
+ end
61
+ end
62
+ end
63
+ @got_instruction = line.stations.first.get_form
64
+ @got_instruction.title.should eq("Enter text from a business card image")
65
+ @got_instruction.instruction.should eq("Describe")
66
+ end
67
+ end
68
+ end
69
+
70
+ context "Delete instruction" do
71
+ it "should delete instruction of a station" do
72
+ # WebMock.allow_net_connect!
73
+ VCR.use_cassette "task_form/block/delete-instruction", :record => :new_episodes do
74
+ line = CF::Line.create("Digitize-d111", "Digitization") do
75
+ CF::InputFormat.new({:line => self, :name => "image_url", :required => true, :valid_type => "url"})
76
+ CF::Station.create({:line => self, :type => "work"}) do |station|
77
+ CF::HumanWorker.new({:station => station, :number => 2, :reward => 20})
78
+ CF::TaskForm.create({:station => station, :title => "Enter text from a business card image", :instruction => "Describe"}) do |i|
79
+ CF::FormField.new({:form => i, :label => "First Name", :field_type => "SA", :required => "true"})
80
+ CF::FormField.new({:form => i, :label => "Middle Name", :field_type => "SA"})
81
+ CF::FormField.new({:form => i, :label => "Last Name", :field_type => "SA", :required => "true"})
82
+ end
83
+ end
84
+ end
85
+ @got_instruction = line.stations.first.get_form
86
+ @got_instruction.title.should eq("Enter text from a business card image")
87
+ @got_instruction.instruction.should eq("Describe")
88
+
89
+ station = line.stations[0]
90
+ deleted_response = CF::TaskForm.delete_instruction(station)
91
+
92
+ deleted_response.code.should eq(200)
93
+ end
94
+ end
95
+ end
96
+ end