mumuki-laboratory 5.13.0 → 6.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (421) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +674 -0
  3. data/app/assets/stylesheets/application/_modules.scss +1 -0
  4. data/app/assets/stylesheets/application/modules/_chapter_show.scss +3 -0
  5. data/app/controllers/api/organizations_controller.rb +3 -3
  6. data/app/controllers/api/users_controller.rb +2 -2
  7. data/app/controllers/application_controller.rb +6 -0
  8. data/app/controllers/discussions_controller.rb +2 -2
  9. data/app/controllers/exercises_controller.rb +1 -1
  10. data/app/controllers/guide_container_controller.rb +1 -1
  11. data/app/controllers/guide_progress_controller.rb +1 -1
  12. data/app/controllers/guides_controller.rb +1 -1
  13. data/app/controllers/users_controller.rb +1 -1
  14. data/app/helpers/discussions_helper.rb +1 -1
  15. data/app/views/chapters/show.html.erb +1 -1
  16. data/lib/events.rb +10 -6
  17. data/lib/mumuki/laboratory.rb +30 -14
  18. data/lib/mumuki/laboratory/controllers/content.rb +1 -1
  19. data/lib/mumuki/laboratory/controllers/dynamic_errors.rb +5 -5
  20. data/lib/mumuki/laboratory/engine.rb +0 -8
  21. data/lib/mumuki/laboratory/extensions.rb +0 -2
  22. data/lib/mumuki/laboratory/version.rb +1 -1
  23. data/lib/tasks/messages.rake +1 -1
  24. data/public/compass_rose.svg +1272 -1262
  25. data/spec/api_helper.rb +7 -0
  26. data/spec/controllers/confirmations_controller_spec.rb +1 -1
  27. data/spec/controllers/organizations_api_controller_spec.rb +8 -8
  28. data/spec/controllers/users_api_controller_spec.rb +7 -7
  29. data/spec/dummy/config/application.rb +4 -0
  30. data/spec/dummy/db/schema.rb +8 -3
  31. data/spec/dummy/db/seeds.rb +7 -3
  32. data/spec/evaluation_helper.rb +1 -1
  33. data/spec/features/home_private_flow_spec.rb +8 -6
  34. data/spec/features/home_public_flow_spec.rb +8 -7
  35. data/spec/features/profile_flow_spec.rb +2 -1
  36. data/spec/login_helper.rb +20 -0
  37. data/spec/models/book_import_spec.rb +5 -5
  38. data/spec/models/course_spec.rb +1 -1
  39. data/spec/models/event_generation_spec.rb +4 -4
  40. data/spec/models/exam_spec.rb +14 -14
  41. data/spec/models/exercise_spec.rb +26 -3
  42. data/spec/models/guide_import_spec.rb +15 -15
  43. data/spec/models/guide_spec.rb +54 -4
  44. data/spec/models/language_spec.rb +48 -46
  45. data/spec/models/message_spec.rb +5 -5
  46. data/spec/models/query_spec.rb +2 -2
  47. data/spec/models/question_spec.rb +1 -1
  48. data/spec/models/solution_spec.rb +2 -2
  49. data/spec/models/topic_import_spec.rb +3 -3
  50. data/spec/models/user_changed_spec.rb +3 -3
  51. data/spec/spec_helper.rb +2 -37
  52. metadata +18 -497
  53. data/app/models/api_client.rb +0 -31
  54. data/app/models/application_record.rb +0 -92
  55. data/app/models/assignment.rb +0 -204
  56. data/app/models/book.rb +0 -47
  57. data/app/models/chapter.rb +0 -29
  58. data/app/models/complement.rb +0 -15
  59. data/app/models/concerns/assistable.rb +0 -17
  60. data/app/models/concerns/contextualization.rb +0 -82
  61. data/app/models/concerns/friendly_name.rb +0 -10
  62. data/app/models/concerns/guide_container.rb +0 -53
  63. data/app/models/concerns/navigation/parent_navigation.rb +0 -27
  64. data/app/models/concerns/navigation/siblings_navigation.rb +0 -19
  65. data/app/models/concerns/navigation/terminal_navigation.rb +0 -13
  66. data/app/models/concerns/submittable/confirmable.rb +0 -5
  67. data/app/models/concerns/submittable/queriable.rb +0 -9
  68. data/app/models/concerns/submittable/questionable.rb +0 -6
  69. data/app/models/concerns/submittable/solvable.rb +0 -32
  70. data/app/models/concerns/submittable/submittable.rb +0 -11
  71. data/app/models/concerns/submittable/triable.rb +0 -9
  72. data/app/models/concerns/with_assignments.rb +0 -32
  73. data/app/models/concerns/with_case_insensitive_search.rb +0 -7
  74. data/app/models/concerns/with_description.rb +0 -12
  75. data/app/models/concerns/with_discussion_creation.rb +0 -9
  76. data/app/models/concerns/with_discussion_creation/subscription.rb +0 -33
  77. data/app/models/concerns/with_discussion_creation/upvote.rb +0 -28
  78. data/app/models/concerns/with_discussion_status.rb +0 -11
  79. data/app/models/concerns/with_discussions.rb +0 -23
  80. data/app/models/concerns/with_editor.rb +0 -39
  81. data/app/models/concerns/with_expectations.rb +0 -19
  82. data/app/models/concerns/with_language.rb +0 -14
  83. data/app/models/concerns/with_layout.rb +0 -7
  84. data/app/models/concerns/with_locale.rb +0 -7
  85. data/app/models/concerns/with_messages.rb +0 -22
  86. data/app/models/concerns/with_number.rb +0 -9
  87. data/app/models/concerns/with_profile.rb +0 -12
  88. data/app/models/concerns/with_randomizations.rb +0 -34
  89. data/app/models/concerns/with_reminders.rb +0 -74
  90. data/app/models/concerns/with_scoped_queries.rb +0 -47
  91. data/app/models/concerns/with_scoped_queries/filter.rb +0 -15
  92. data/app/models/concerns/with_scoped_queries/page.rb +0 -10
  93. data/app/models/concerns/with_scoped_queries/sort.rb +0 -47
  94. data/app/models/concerns/with_slug.rb +0 -32
  95. data/app/models/concerns/with_usages.rb +0 -16
  96. data/app/models/concerns/with_user_navigation.rb +0 -9
  97. data/app/models/content.rb +0 -10
  98. data/app/models/course.rb +0 -20
  99. data/app/models/discussion.rb +0 -136
  100. data/app/models/event.rb +0 -2
  101. data/app/models/exam.rb +0 -147
  102. data/app/models/exam_authorization.rb +0 -10
  103. data/app/models/exercise.rb +0 -190
  104. data/app/models/exercise/challenge.rb +0 -25
  105. data/app/models/exercise/interactive.rb +0 -41
  106. data/app/models/exercise/playground.rb +0 -23
  107. data/app/models/exercise/problem.rb +0 -41
  108. data/app/models/exercise/queriable_challenge.rb +0 -5
  109. data/app/models/exercise/reading.rb +0 -17
  110. data/app/models/guide.rb +0 -92
  111. data/app/models/invitation.rb +0 -36
  112. data/app/models/language.rb +0 -106
  113. data/app/models/lesson.rb +0 -25
  114. data/app/models/message.rb +0 -68
  115. data/app/models/organization.rb +0 -118
  116. data/app/models/stats.rb +0 -24
  117. data/app/models/submission/confirmation.rb +0 -9
  118. data/app/models/submission/console_submission.rb +0 -13
  119. data/app/models/submission/persistent_submission.rb +0 -7
  120. data/app/models/submission/query.rb +0 -19
  121. data/app/models/submission/question.rb +0 -14
  122. data/app/models/submission/solution.rb +0 -7
  123. data/app/models/submission/submission.rb +0 -56
  124. data/app/models/submission/try.rb +0 -20
  125. data/app/models/subscription.rb +0 -12
  126. data/app/models/topic.rb +0 -46
  127. data/app/models/topic_container.rb +0 -21
  128. data/app/models/upvote.rb +0 -4
  129. data/app/models/usage.rb +0 -20
  130. data/app/models/user.rb +0 -153
  131. data/app/models/with_stats.rb +0 -9
  132. data/db/migrate/20141120231135_create_exercises.rb +0 -11
  133. data/db/migrate/20141120231735_create_submissions.rb +0 -9
  134. data/db/migrate/20141121001134_add_status_to_submission.rb +0 -5
  135. data/db/migrate/20141121013100_add_result_to_submission.rb +0 -5
  136. data/db/migrate/20141121122921_add_language_to_exercise.rb +0 -5
  137. data/db/migrate/20141124023403_create_users.rb +0 -13
  138. data/db/migrate/20141124032114_add_user_to_submission.rb +0 -5
  139. data/db/migrate/20141207235356_add_submissions_count_to_exercise.rb +0 -5
  140. data/db/migrate/20141208005050_add_author_to_exercise.rb +0 -5
  141. data/db/migrate/20141208005125_rename_user_to_submitter.rb +0 -5
  142. data/db/migrate/20141212044717_acts_as_taggable_on_migration.acts_as_taggable_on_engine.rb +0 -31
  143. data/db/migrate/20141212044718_add_missing_unique_indices.acts_as_taggable_on_engine.rb +0 -20
  144. data/db/migrate/20141212044719_add_taggings_counter_cache_to_tags.acts_as_taggable_on_engine.rb +0 -10
  145. data/db/migrate/20141212044720_add_missing_taggable_index.acts_as_taggable_on_engine.rb +0 -10
  146. data/db/migrate/20141221213109_create_exercise_repos.rb +0 -11
  147. data/db/migrate/20141221215035_add_origin_to_exercise.rb +0 -6
  148. data/db/migrate/20141225034553_rename_exercise_repo_to_guide.rb +0 -6
  149. data/db/migrate/20141225143218_rename_github_url_to_github_repository.rb +0 -5
  150. data/db/migrate/20141225195510_create_imports.rb +0 -9
  151. data/db/migrate/20141225211350_add_status_to_import.rb +0 -6
  152. data/db/migrate/20141226010922_add_result_to_import.rb +0 -5
  153. data/db/migrate/20141228151351_change_exercise_description_to_text.rb +0 -5
  154. data/db/migrate/20141231074400_create_languages.rb +0 -13
  155. data/db/migrate/20141231191842_change_language_column_type.rb +0 -6
  156. data/db/migrate/20141231192030_rename_author_to_plugin_author.rb +0 -5
  157. data/db/migrate/20141231234940_increment_language_id.rb +0 -5
  158. data/db/migrate/20150108014005_add_locale_to_exercise.rb +0 -5
  159. data/db/migrate/20150111160450_add_uniques_to_languages.rb +0 -6
  160. data/db/migrate/20150125042217_add_test_syntax_hint_to_language.rb +0 -5
  161. data/db/migrate/20150125051529_add_hint_to_exercise.rb +0 -5
  162. data/db/migrate/20150126213310_devise_create_admin_users.rb +0 -42
  163. data/db/migrate/20150126213316_create_active_admin_comments.rb +0 -19
  164. data/db/migrate/20150315072037_add_description_to_guide.rb +0 -6
  165. data/db/migrate/20150317052723_remove_language_author.rb +0 -5
  166. data/db/migrate/20150317053307_remove_language_hint.rb +0 -5
  167. data/db/migrate/20150321150030_add_extra_code_to_exercise.rb +0 -5
  168. data/db/migrate/20150328211331_create_expectations.rb +0 -11
  169. data/db/migrate/20150329163753_add_email_to_user.rb +0 -5
  170. data/db/migrate/20150330020553_add_expectation_results_to_submission.rb +0 -5
  171. data/db/migrate/20150405231013_create_exports.rb +0 -9
  172. data/db/migrate/20150405232603_add_default_guide_to_user.rb +0 -5
  173. data/db/migrate/20150406020152_add_last_submission_date_to_user.rb +0 -5
  174. data/db/migrate/20150407225356_add_unique_index_to_users.rb +0 -5
  175. data/db/migrate/20150408020712_add_status_to_export.rb +0 -6
  176. data/db/migrate/20150408022654_add_commiter_to_export.rb +0 -5
  177. data/db/migrate/20150411215351_change_guide_description_to_text.rb +0 -5
  178. data/db/migrate/20150412042959_add_committer_to_import.rb +0 -5
  179. data/db/migrate/20150412201651_remove_default_guide_from_user.rb +0 -5
  180. data/db/migrate/20150415053559_add_image_url_to_user.rb +0 -5
  181. data/db/migrate/20150415211341_add_position_to_exercise.rb +0 -5
  182. data/db/migrate/20150415234515_create_relationships.rb +0 -10
  183. data/db/migrate/20150417052238_add_original_id_format_to_guide.rb +0 -5
  184. data/db/migrate/20150418055334_add_locale_and_language_to_guide.rb +0 -6
  185. data/db/migrate/20150424180136_add_guides_users_association_tables.rb +0 -14
  186. data/db/migrate/20150428195229_add_guides_suggestions.rb +0 -8
  187. data/db/migrate/20150507215646_remove_relationship.rb +0 -5
  188. data/db/migrate/20150508015148_create_api_tokens.rb +0 -10
  189. data/db/migrate/20150509191428_add_name_to_token.rb +0 -5
  190. data/db/migrate/20150512235847_add_feedback_to_submission.rb +0 -5
  191. data/db/migrate/20150513203636_create_categories.rb +0 -12
  192. data/db/migrate/20150513204102_create_starting_points.rb +0 -11
  193. data/db/migrate/20150517074730_add_extra_code_to_guide.rb +0 -5
  194. data/db/migrate/20150518174912_add_language_output_visibility_flag.rb +0 -5
  195. data/db/migrate/20150518185508_add_content_type_to_language.rb +0 -5
  196. data/db/migrate/20150519131033_set_default_locale_for_guide.rb +0 -5
  197. data/db/migrate/20150519174628_remove_language_name_uniq.rb +0 -6
  198. data/db/migrate/20150519220307_rename_api_token_columns.rb +0 -6
  199. data/db/migrate/20150520011404_convert_starting_point_into_path.rb +0 -12
  200. data/db/migrate/20150529135324_add_corollary_to_guide.rb +0 -5
  201. data/db/migrate/20150529141430_add_corollary_to_exercise.rb +0 -5
  202. data/db/migrate/20150531164450_add_test_extension_to_language.rb +0 -5
  203. data/db/migrate/20150603003459_remove_language_extension_uniq.rb +0 -6
  204. data/db/migrate/20150603020457_remove_guide_name_uniq.rb +0 -6
  205. data/db/migrate/20150605065543_add_highlight_mode.rb +0 -5
  206. data/db/migrate/20150614173852_add_learning_flag.rb +0 -5
  207. data/db/migrate/20150614180512_add_beta_flag.rb +0 -5
  208. data/db/migrate/20150614191257_add_last_exercise.rb +0 -5
  209. data/db/migrate/20150620181839_add_layout_to_exercise.rb +0 -5
  210. data/db/migrate/20150701030644_add_unique_to_language_name_index.rb +0 -6
  211. data/db/migrate/20150701212609_add_test_results_to_submission.rb +0 -5
  212. data/db/migrate/20150708212022_add_position_to_category.rb +0 -5
  213. data/db/migrate/20150708212836_change_category_description_to_text.rb +0 -5
  214. data/db/migrate/20150713120916_add_expectations_column_to_exercise.rb +0 -5
  215. data/db/migrate/20150714000532_remove_expectations_relation.rb +0 -5
  216. data/db/migrate/20150722003532_create_event_subscribers.rb +0 -10
  217. data/db/migrate/20150722030820_create_solutions.rb +0 -16
  218. data/db/migrate/20150722142019_add_submissions_count_to_solution.rb +0 -5
  219. data/db/migrate/20150723052640_add_submission_id_to_solution.rb +0 -5
  220. data/db/migrate/20150724062215_add_language_description.rb +0 -5
  221. data/db/migrate/20150724062233_add_category_links.rb +0 -5
  222. data/db/migrate/20150724062249_add_category_long_description.rb +0 -5
  223. data/db/migrate/20150819194207_convert_submissions_into_solutions.rb +0 -34
  224. data/db/migrate/20150819202310_remove_submissions.rb +0 -5
  225. data/db/migrate/20150826023647_create_friendly_id_slugs.rb +0 -15
  226. data/db/migrate/20150826023757_add_slug_to_guides.rb +0 -6
  227. data/db/migrate/20150826024859_add_slug_to_exercises.rb +0 -6
  228. data/db/migrate/20150828013106_add_remember_me_token_to_user.rb +0 -5
  229. data/db/migrate/20150829211550_add_queriable_to_language.rb +0 -5
  230. data/db/migrate/20150829215524_add_expectations_column_to_guide.rb +0 -5
  231. data/db/migrate/20150905214532_rename_exercise_title_to_name.rb +0 -5
  232. data/db/migrate/20151001143118_rename_solution_to_assignment.rb +0 -5
  233. data/db/migrate/20151001183858_rename_assignment_content_to_solution.rb +0 -5
  234. data/db/migrate/20151003003856_add_type_to_exercise.rb +0 -5
  235. data/db/migrate/20151020145904_remove_guide_git_information.rb +0 -7
  236. data/db/migrate/20151104163433_create_tenants.rb +0 -9
  237. data/db/migrate/20151104172241_create_path_rules.rb +0 -11
  238. data/db/migrate/20151104173956_remove_guide_position.rb +0 -5
  239. data/db/migrate/20151104220859_remove_path_from_guide.rb +0 -5
  240. data/db/migrate/20151107232242_move_slug_to_path_rule.rb +0 -6
  241. data/db/migrate/20151108173838_remove_slugs.rb +0 -5
  242. data/db/migrate/20151108182857_remove_act_as_taggable_taggings.rb +0 -6
  243. data/db/migrate/20151108183319_add_tags_array.rb +0 -5
  244. data/db/migrate/20151206072741_rename_guide_extra_code_to_extra.rb +0 -5
  245. data/db/migrate/20151208224736_rename_path_rule_to_chapter_guide.rb +0 -5
  246. data/db/migrate/20151208224907_rename_category_to_chapter.rb +0 -5
  247. data/db/migrate/20151208225503_rename_chapter_position_to_number.rb +0 -5
  248. data/db/migrate/20151208231749_rename_chapter_guide_path_to_chapter.rb +0 -5
  249. data/db/migrate/20151208233707_rename_url_to_slug.rb +0 -5
  250. data/db/migrate/20151209021925_add_locale_to_tenant.rb +0 -5
  251. data/db/migrate/20151210204646_remove_language_extensions.rb +0 -6
  252. data/db/migrate/20151211032811_drop_collaborators.rb +0 -5
  253. data/db/migrate/20151211033000_drop_contributors.rb +0 -5
  254. data/db/migrate/20151211034943_remove_authors.rb +0 -6
  255. data/db/migrate/20151211035206_add_contact_email_to_tenant.rb +0 -5
  256. data/db/migrate/20151218172557_drop_import.rb +0 -6
  257. data/db/migrate/20151222153838_add_default_content_to_exercise.rb +0 -5
  258. data/db/migrate/20151223014138_change_language_icon_url_into_devicon_id.rb +0 -5
  259. data/db/migrate/20151224174248_remove_original_id.rb +0 -5
  260. data/db/migrate/20151229153839_replace_learning_with_type_in_guides.rb +0 -6
  261. data/db/migrate/20160108191156_rename_extra_code.rb +0 -5
  262. data/db/migrate/20160108215313_remove_unique_index_from_users.rb +0 -5
  263. data/db/migrate/20160119024542_add_preface_to_tenant.rb +0 -5
  264. data/db/migrate/20160119040351_rename_tenant_to_book.rb +0 -5
  265. data/db/migrate/20160119191508_rename_position_to_number.rb +0 -6
  266. data/db/migrate/20160120171336_add_type_to_event_suscriber.rb +0 -5
  267. data/db/migrate/20160205184243_add_bibliotheca_id_to_exercise.rb +0 -5
  268. data/db/migrate/20160214191548_required_bibliotheca_id.rb +0 -5
  269. data/db/migrate/20160222165337_add_hidden_flag_to_extra_code.rb +0 -5
  270. data/db/migrate/20160222192958_rename_chapter_guide_to_lesson.rb +0 -5
  271. data/db/migrate/20160307184203_add_prompt_to_language.rb +0 -5
  272. data/db/migrate/20160331210507_add_comment_model.rb +0 -13
  273. data/db/migrate/20160401142104_add_readed_to_comment.rb +0 -5
  274. data/db/migrate/20160404214826_change_readed_to_read.rb +0 -5
  275. data/db/migrate/20160405184624_change_submission_id_to_string.rb +0 -5
  276. data/db/migrate/20160412193123_change_content_comment_to_text.rb +0 -5
  277. data/db/migrate/20160414150800_remove_tenant_subscriber.rb +0 -5
  278. data/db/migrate/20160426171156_add_new_expectations_to_exercise.rb +0 -5
  279. data/db/migrate/20160427195306_create_organizations.rb +0 -12
  280. data/db/migrate/20160427223805_add_chapter_book.rb +0 -5
  281. data/db/migrate/20160427234538_create_topics.rb +0 -11
  282. data/db/migrate/20160427235605_add_topic_to_chapter.rb +0 -5
  283. data/db/migrate/20160428162753_add_topic_id_to_lesson.rb +0 -5
  284. data/db/migrate/20160428175230_create_exams.rb +0 -10
  285. data/db/migrate/20160428224823_add_duration_to_exam.rb +0 -5
  286. data/db/migrate/20160429174901_add_start_end_time_to_exam.rb +0 -6
  287. data/db/migrate/20160429181825_add_exam_user.rb +0 -8
  288. data/db/migrate/20160430225048_create_complements.rb +0 -10
  289. data/db/migrate/20160430231035_remove_chapter_lesson.rb +0 -5
  290. data/db/migrate/20160430235331_remove_chapter_name_description.rb +0 -6
  291. data/db/migrate/20160430235656_remove_chapter_locale_image_url.rb +0 -6
  292. data/db/migrate/20160501003355_add_long_description_to_topic.rb +0 -5
  293. data/db/migrate/20160501071847_create_usages.rb +0 -11
  294. data/db/migrate/20160506012945_add_slug_to_topic_and_book.rb +0 -9
  295. data/db/migrate/20160506035230_remove_slug_from_lesson.rb +0 -5
  296. data/db/migrate/20160506041446_rename_preface_to_description.rb +0 -5
  297. data/db/migrate/20160506172239_remove_event_subscriber.rb +0 -5
  298. data/db/migrate/20160506175610_remove_api_tokens.rb +0 -5
  299. data/db/migrate/20160506181152_remove_admin_user.rb +0 -5
  300. data/db/migrate/20160506182333_remove_admin_comments.rb +0 -5
  301. data/db/migrate/20160510183137_add_private_to_organization.rb +0 -5
  302. data/db/migrate/20160512134321_add_organization_image.rb +0 -5
  303. data/db/migrate/20160516191936_add_stateful_console_to_language.rb +0 -5
  304. data/db/migrate/20160517215229_add_classroom_idto_exams.rb +0 -6
  305. data/db/migrate/20160518212552_rename_exam_users_to_exam_authorization.rb +0 -5
  306. data/db/migrate/20160518213912_add_user_start_data_in_exam.rb +0 -6
  307. data/db/migrate/20160519045220_add_id_to_exam_authorizations.rb +0 -5
  308. data/db/migrate/20160520141716_remove_chapter_links_and_long_description.rb +0 -6
  309. data/db/migrate/20160520153115_change_exam_classroom_id_to_string.rb +0 -5
  310. data/db/migrate/20160526172026_remove_not_null_constraint_exam_duration.rb +0 -6
  311. data/db/migrate/20160526182119_add_metadata_to_user.rb +0 -5
  312. data/db/migrate/20160617175235_add_last_organization_to_user.rb +0 -5
  313. data/db/migrate/20160617195350_change_metadata_to_text.rb +0 -5
  314. data/db/migrate/20160701195105_add_login_methods_to_organization.rb +0 -5
  315. data/db/migrate/20160705160244_add_manual_evaluation_to_exercise.rb +0 -5
  316. data/db/migrate/20160715001254_rename_test_runner_url.rb +0 -5
  317. data/db/migrate/20160729194600_change_default_content_to_text.rb +0 -5
  318. data/db/migrate/20160812003350_change_default_login_methods.rb +0 -5
  319. data/db/migrate/20160815225314_rename_long_description_to_appendix.rb +0 -5
  320. data/db/migrate/20160819181024_make_organization_private_by_default.rb +0 -5
  321. data/db/migrate/20160830160937_add_authoring_information_to_guide.rb +0 -6
  322. data/db/migrate/20160907010315_remove_exercise_slug.rb +0 -5
  323. data/db/migrate/20161004202742_add_editor_to_problem.rb +0 -6
  324. data/db/migrate/20161018142147_add_language_extension.rb +0 -5
  325. data/db/migrate/20161107171305_remove_devicon_column_from_language.rb +0 -5
  326. data/db/migrate/20161222182015_rename_uid_to_social_id.rb +0 -5
  327. data/db/migrate/20161222182724_add_uid_to_user.rb +0 -5
  328. data/db/migrate/20161226181932_remove_metadata_from_users.rb +0 -5
  329. data/db/migrate/20161230055953_add_not_null_constraint_to_uid_in_user.rb +0 -5
  330. data/db/migrate/20161231224116_add_permissions_to_user.rb +0 -5
  331. data/db/migrate/20170125185012_add_new_fields_on_organization.rb +0 -15
  332. data/db/migrate/20170207154702_add_index_to_uid.rb +0 -5
  333. data/db/migrate/20170224040846_create_invitations.rb +0 -11
  334. data/db/migrate/20170224061531_make_tos_type_text.rb +0 -5
  335. data/db/migrate/20170301160253_rename_invitation_slug_to_code.rb +0 -5
  336. data/db/migrate/20170330145157_rename_comment_to_messages.rb +0 -6
  337. data/db/migrate/20170407190910_add_has_messages_flag_to_assignment.rb +0 -5
  338. data/db/migrate/20170526191251_add_community_link_to_organizations.rb +0 -5
  339. data/db/migrate/20170526204944_add_has_messages_to_organizations.rb +0 -5
  340. data/db/migrate/20170601181759_rename_has_messages_to_raise_hand_enabled_in_organization.rb +0 -5
  341. data/db/migrate/20170608033403_remove_has_messages_from_assignment.rb +0 -5
  342. data/db/migrate/20170608044038_remove_messages_exercise_id.rb +0 -5
  343. data/db/migrate/20170608154055_remove_message_type_column.rb +0 -5
  344. data/db/migrate/20170612173212_add_first_name_and_last_name_to_user.rb +0 -6
  345. data/db/migrate/20170621222902_introduce_settings_and_themes.rb +0 -40
  346. data/db/migrate/20170818185127_add_guide_slug_constraint.rb +0 -5
  347. data/db/migrate/20170830020507_change_invitation_expiration_date_type.rb +0 -5
  348. data/db/migrate/20171003204152_add_goal_to_exercise.rb +0 -5
  349. data/db/migrate/20171003204209_add_queries_to_assignment.rb +0 -6
  350. data/db/migrate/20171004134607_add_triable_to_language.rb +0 -5
  351. data/db/migrate/20171024182244_add_devicon_and_comment_type_to_language.rb +0 -6
  352. data/db/migrate/20171109181818_add_manual_evaluation_commend_and_submission_id_index_in_assignment.rb +0 -6
  353. data/db/migrate/20171229042201_add_assets_to_language.rb +0 -9
  354. data/db/migrate/20180117014110_add_custom_editor_assets_to_language.rb +0 -13
  355. data/db/migrate/20180123174410_add_initial_and_final_states_to_exercises.rb +0 -6
  356. data/db/migrate/20180123180836_add_accepts_reminders_to_users.rb +0 -5
  357. data/db/migrate/20180129142749_add_api_client.rb +0 -11
  358. data/db/migrate/20180130194923_add_last_reminded_date_to_users.rb +0 -5
  359. data/db/migrate/20180130204935_add_course.rb +0 -16
  360. data/db/migrate/20180307150148_add_failed_submissions_count_to_assignments.rb +0 -5
  361. data/db/migrate/20180323125804_remove_user_name.rb +0 -5
  362. data/db/migrate/20180323140943_remove_unused_omniauth_fields.rb +0 -7
  363. data/db/migrate/20180326224511_remove_book_ids.rb +0 -5
  364. data/db/migrate/20180402015405_remove_course_uid.rb +0 -5
  365. data/db/migrate/20180504173548_create_discussions.rb +0 -12
  366. data/db/migrate/20180504185845_add_discussion_id_to_message.rb +0 -5
  367. data/db/migrate/20180526141344_add_tips_rules_to_exercise.rb +0 -5
  368. data/db/migrate/20180605143727_add_submission_to_discussion.rb +0 -16
  369. data/db/migrate/20180611190239_add_randomizations_to_exercises.rb +0 -5
  370. data/db/migrate/20180619182555_create_subscriptions.rb +0 -9
  371. data/db/migrate/20180702153442_create_upvotes.rb +0 -8
  372. data/db/migrate/20180702175220_add_upvotes_count_to_discussions.rb +0 -5
  373. data/db/migrate/20180704150839_rename_assignment_status_to_submission_status.rb +0 -5
  374. data/db/migrate/20180725145801_add_submissions_caps_to_exams.rb +0 -6
  375. data/db/migrate/20180802190437_add_approved_to_messages.rb +0 -5
  376. data/db/migrate/20181004173216_add_free_form_editor_to_exercises.rb +0 -5
  377. data/db/migrate/20181014233438_remove_non_null_constraint_from_permissions.rb +0 -5
  378. data/db/migrate/20181101180652_add_unique_index_to_organizations_name.rb +0 -5
  379. data/db/seeds/users.rb +0 -3
  380. data/lib/mumuki/laboratory/evaluation.rb +0 -5
  381. data/lib/mumuki/laboratory/evaluation/automated.rb +0 -5
  382. data/lib/mumuki/laboratory/evaluation/manual.rb +0 -5
  383. data/lib/mumuki/laboratory/exceptions.rb +0 -5
  384. data/lib/mumuki/laboratory/exceptions/blocked_forum_error.rb +0 -2
  385. data/lib/mumuki/laboratory/exceptions/forbidden_error.rb +0 -2
  386. data/lib/mumuki/laboratory/exceptions/gone_error.rb +0 -2
  387. data/lib/mumuki/laboratory/exceptions/not_found_error.rb +0 -2
  388. data/lib/mumuki/laboratory/exceptions/unauthorized_error.rb +0 -2
  389. data/lib/mumuki/laboratory/extensions/array.rb +0 -11
  390. data/lib/mumuki/laboratory/extensions/string.rb +0 -29
  391. data/lib/mumuki/laboratory/file.rb +0 -18
  392. data/lib/mumuki/laboratory/locales/activerecord.en.yml +0 -13
  393. data/lib/mumuki/laboratory/locales/activerecord.es.yml +0 -42
  394. data/lib/mumuki/laboratory/locales/narrator.en.yml +0 -14
  395. data/lib/mumuki/laboratory/locales/narrator.es.yml +0 -14
  396. data/lib/mumuki/laboratory/locales/narrator.pt.yml +0 -14
  397. data/lib/mumuki/laboratory/mumukit/auth.rb +0 -6
  398. data/lib/mumuki/laboratory/mumukit/login.rb +0 -4
  399. data/lib/mumuki/laboratory/mumukit/nuntius.rb +0 -6
  400. data/lib/mumuki/laboratory/mumukit/platform.rb +0 -34
  401. data/lib/mumuki/laboratory/seed.rb +0 -33
  402. data/lib/mumuki/laboratory/status.rb +0 -72
  403. data/lib/mumuki/laboratory/status/discussion/closed.rb +0 -15
  404. data/lib/mumuki/laboratory/status/discussion/discussion.rb +0 -44
  405. data/lib/mumuki/laboratory/status/discussion/opened.rb +0 -31
  406. data/lib/mumuki/laboratory/status/discussion/pending_review.rb +0 -15
  407. data/lib/mumuki/laboratory/status/discussion/solved.rb +0 -19
  408. data/lib/mumuki/laboratory/status/submission/aborted.rb +0 -11
  409. data/lib/mumuki/laboratory/status/submission/errored.rb +0 -19
  410. data/lib/mumuki/laboratory/status/submission/failed.rb +0 -15
  411. data/lib/mumuki/laboratory/status/submission/manual_evaluation_pending.rb +0 -15
  412. data/lib/mumuki/laboratory/status/submission/passed.rb +0 -11
  413. data/lib/mumuki/laboratory/status/submission/passed_with_warnings.rb +0 -15
  414. data/lib/mumuki/laboratory/status/submission/pending.rb +0 -11
  415. data/lib/mumuki/laboratory/status/submission/running.rb +0 -15
  416. data/lib/mumuki/laboratory/status/submission/submission.rb +0 -38
  417. data/lib/tasks/guides.rake +0 -11
  418. data/spec/dummy/config/initializers/application_controller_renderer.rb +0 -8
  419. data/spec/dummy/config/initializers/backtrace_silencers.rb +0 -7
  420. data/spec/dummy/config/initializers/inflections.rb +0 -16
  421. data/spec/dummy/config/initializers/mime_types.rb +0 -4
@@ -0,0 +1,7 @@
1
+ def set_token!(token)
2
+ @request.env["HTTP_AUTHORIZATION"] = token
3
+ end
4
+
5
+ def set_api_client!(api_client)
6
+ set_token! api_client.token
7
+ end
@@ -15,6 +15,6 @@ describe ExerciseConfirmationsController, organization_workspace: :test do
15
15
  before { post :create, params: { exercise_id: reading.id } }
16
16
 
17
17
  it { expect(response.status).to eq 200 }
18
- it { expect(response.body.parse_json).to json_like(guide_finished_by_solution: true, class_for_progress_list_item: 'progress-list-item text-center success active') }
18
+ it { expect(response.body).to json_like(guide_finished_by_solution: true, class_for_progress_list_item: 'progress-list-item text-center success active') }
19
19
  end
20
20
  end
@@ -30,23 +30,23 @@ describe Api::OrganizationsController, type: :controller, organization_workspace
30
30
  let!(:another_private_organization) { create :organization, name: 'another_private', public: false }
31
31
 
32
32
  context 'GET /organizations' do
33
+ let(:organization_names) { JSON.parse(response.body)['organizations'].map { |it| it['name'] } }
34
+
33
35
  context 'with wildcard permissions' do
34
36
  before { get :index }
35
37
  let(:api_client) { create :api_client, role: :janitor, grant: '*' }
36
- let!(:body) { response.body.parse_json }
37
38
 
38
39
  it { check_status! 200 }
39
40
 
40
- it { expect(body[:organizations].map { |it| it[:name] }).to contain_exactly 'base', 'public', 'dot.org', 'private', 'another_private' }
41
+ it { expect(organization_names).to contain_exactly 'base', 'public', 'dot.org', 'private', 'another_private' }
41
42
  end
42
43
  context 'with non-wildcard permissions' do
43
44
  before { get :index }
44
45
  let(:api_client) { create :api_client, role: :janitor, grant: 'public/*:private/*' }
45
- let!(:body) { response.body.parse_json }
46
46
 
47
47
  it { check_status! 200 }
48
48
 
49
- it { expect(body[:organizations].map { |it| it[:name] }).to contain_exactly 'public', 'private' }
49
+ it { expect(organization_names).to contain_exactly 'public', 'private' }
50
50
  end
51
51
  end
52
52
 
@@ -87,7 +87,7 @@ describe Api::OrganizationsController, type: :controller, organization_workspace
87
87
  let(:api_client) { create :api_client, role: :janitor, grant: 'private/*' }
88
88
 
89
89
  it { check_status! 200 }
90
- it { expect(response.body.parse_json).to json_like(private_organization.as_platform_json) }
90
+ it { expect(response.body).to json_like(private_organization.to_resource_h) }
91
91
  end
92
92
  end
93
93
 
@@ -115,7 +115,7 @@ describe Api::OrganizationsController, type: :controller, organization_workspace
115
115
  let(:organization) { Organization.find_by name: 'a-name' }
116
116
 
117
117
  it { check_status! 200 }
118
- it { expect(response.body.parse_json).to json_like(organization.as_platform_json) }
118
+ it { expect(response.body).to json_like(organization.to_resource_h) }
119
119
  it { expect(Organization.count).to eq 2 }
120
120
  it { expect(organization.name).to eq 'a-name' }
121
121
  it { expect(organization.contact_email).to eq 'an_email@gmail.com' }
@@ -170,7 +170,7 @@ describe Api::OrganizationsController, type: :controller, organization_workspace
170
170
  end
171
171
 
172
172
  it { check_status! 400 }
173
- it { expect(response.body.parse_json).to eq expected_errors }
173
+ it { expect(response.body).to json_eq expected_errors }
174
174
  end
175
175
  end
176
176
 
@@ -205,7 +205,7 @@ describe Api::OrganizationsController, type: :controller, organization_workspace
205
205
  before { put :update, params: {id: organization.name, organization: update_json} }
206
206
 
207
207
  it { check_status! 200 }
208
- it { expect(response.body.parse_json).to json_like(
208
+ it { expect(response.body).to json_like(
209
209
  book: book.slug,
210
210
  name: "existing-organization",
211
211
  profile: {
@@ -25,13 +25,13 @@ describe Api::UsersController, type: :controller, organization_workspace: :base
25
25
  before { post :create, params: {user: user_json} }
26
26
 
27
27
  it { expect(response.status).to eq 200 }
28
- it { expect(response.body.parse_json).to json_like({uid: 'foo@bar.com',
29
- first_name: 'foo',
30
- last_name: 'bar',
31
- email: 'foo@bar.com',
32
- permissions: {'student' => 'test/bar'},
33
- image_url: 'user_shape.png'},
34
- except: [:id, :created_at, :updated_at]) }
28
+ it { expect(response.body).to json_like({uid: 'foo@bar.com',
29
+ first_name: 'foo',
30
+ last_name: 'bar',
31
+ email: 'foo@bar.com',
32
+ permissions: {'student' => 'test/bar'},
33
+ image_url: 'user_shape.png'},
34
+ except: [:id, :created_at, :updated_at]) }
35
35
  it { expect(User.count).to eq 2 }
36
36
  it { expect(User.last.student? 'test/_').to be true }
37
37
  it { expect(User.last.uid).to eq 'foo@bar.com' }
@@ -8,6 +8,10 @@ require "mumuki/laboratory"
8
8
  module Dummy
9
9
  class Application < Rails::Application
10
10
  config.load_defaults 5.1
11
+
12
+ Mumuki::Domain::Engine.paths['db/migrate'].expanded.each do |expanded_path|
13
+ config.paths['db/migrate'] << expanded_path
14
+ end
11
15
  end
12
16
  end
13
17
 
@@ -10,7 +10,7 @@
10
10
  #
11
11
  # It's strongly recommended that you check this file into your version control system.
12
12
 
13
- ActiveRecord::Schema.define(version: 20181101180652) do
13
+ ActiveRecord::Schema.define(version: 20181114201620) do
14
14
 
15
15
  # These are extensions that must be enabled in order to support this database
16
16
  enable_extension "plpgsql"
@@ -51,7 +51,6 @@ ActiveRecord::Schema.define(version: 20181101180652) do
51
51
  t.datetime "created_at"
52
52
  t.datetime "updated_at"
53
53
  t.string "locale", default: "en"
54
- t.string "contact_email", default: "info@mumuki.org", null: false
55
54
  t.text "description"
56
55
  t.string "slug"
57
56
  t.index ["slug"], name: "index_books_on_slug", unique: true
@@ -166,6 +165,7 @@ ActiveRecord::Schema.define(version: 20181101180652) do
166
165
  t.text "assistance_rules"
167
166
  t.text "randomizations"
168
167
  t.text "free_form_editor_source"
168
+ t.text "teacher_info"
169
169
  t.index ["guide_id"], name: "index_exercises_on_guide_id"
170
170
  t.index ["language_id"], name: "index_exercises_on_language_id"
171
171
  end
@@ -184,7 +184,10 @@ ActiveRecord::Schema.define(version: 20181101180652) do
184
184
  t.string "slug", default: "", null: false
185
185
  t.integer "type", default: 0, null: false
186
186
  t.text "authors"
187
- t.text "contributors"
187
+ t.text "collaborators"
188
+ t.string "id_format", default: "%05d"
189
+ t.boolean "private", default: false
190
+ t.text "teacher_info"
188
191
  t.index ["name"], name: "index_guides_on_name"
189
192
  t.index ["slug"], name: "index_guides_on_slug", unique: true
190
193
  end
@@ -218,6 +221,8 @@ ActiveRecord::Schema.define(version: 20181101180652) do
218
221
  t.string "editor_js_urls", default: [], array: true
219
222
  t.string "editor_html_urls", default: [], array: true
220
223
  t.string "editor_css_urls", default: [], array: true
224
+ t.string "test_extension"
225
+ t.text "test_template"
221
226
  t.index ["name"], name: "index_languages_on_name", unique: true
222
227
  end
223
228
 
@@ -1,7 +1,7 @@
1
- require 'mumuki/laboratory/seed'
1
+ require 'mumuki/domain/seed'
2
2
 
3
- Mumuki::Laboratory::Seed.import_languages!
4
- Mumuki::Laboratory::Seed.import_main_contents!
3
+ Mumuki::Domain::Seed.import_languages!
4
+ Mumuki::Domain::Seed.import_main_contents!
5
5
 
6
6
  Organization.find_or_create_by!(name: 'base') do |org|
7
7
  org.contact_email = 'issues@mumuki.org'
@@ -17,3 +17,7 @@ Organization.find_or_create_by!(name: 'private') do |org|
17
17
  end
18
18
 
19
19
  Organization.find_or_create_by!(name: 'central')
20
+
21
+ User.find_or_create_by!(uid: 'dev.student@mumuki.org') { |org| org.permissions = {student: 'central/*'} }
22
+ User.find_or_create_by!(uid: 'dev.teacher@mumuki.org') { |org| org.permissions = {teacher: 'private/*'} }
23
+ User.find_or_create_by!(uid: 'dev.owner@mumuki.org') { |org| org.permissions = {owner: '*/*'} }
@@ -1,6 +1,6 @@
1
1
  Language.class_eval do
2
2
  def test_only_fake_response
3
- {status: Mumuki::Laboratory::Status::Submission::Failed, result: 'noop result'}
3
+ {status: Mumuki::Domain::Status::Submission::Failed, result: 'noop result'}
4
4
  end
5
5
 
6
6
  def run_tests!(*)
@@ -18,6 +18,8 @@ feature 'private org' do
18
18
  ])
19
19
  ]) }
20
20
 
21
+ let!(:current_organization) { Organization.current }
22
+
21
23
  before { reindex_current_organization! }
22
24
 
23
25
 
@@ -56,10 +58,10 @@ feature 'private org' do
56
58
 
57
59
  visit '/'
58
60
 
59
- expect(student.reload.last_organization).to eq Organization.current
61
+ expect(student.reload.last_organization).to eq current_organization
60
62
  expect(page).to have_text('powered by mumuki')
61
- expect(page).to have_text(Organization.current.description)
62
- expect(page).to have_text(Organization.current.book.description)
63
+ expect(page).to have_text(current_organization.description)
64
+ expect(page).to have_text(current_organization.book.description)
63
65
  end
64
66
 
65
67
  scenario 'teacher should access' do
@@ -67,10 +69,10 @@ feature 'private org' do
67
69
 
68
70
  visit '/'
69
71
 
70
- expect(teacher.reload.last_organization).to eq Organization.current
72
+ expect(teacher.reload.last_organization).to eq current_organization
71
73
  expect(page).to have_text('powered by mumuki')
72
- expect(page).to have_text(Organization.current.description)
73
- expect(page).to have_text(Organization.current.book.description)
74
+ expect(page).to have_text(current_organization.description)
75
+ expect(page).to have_text(current_organization.book.description)
74
76
  end
75
77
  end
76
78
  end
@@ -7,7 +7,8 @@ feature 'public org', organization_workspace: :test do
7
7
  let!(:chapter) {
8
8
  create(:chapter, lessons: [
9
9
  create(:lesson, guide: guide)]) }
10
- let(:book) { Organization.current.book }
10
+ let!(:current_organization) { Organization.current }
11
+ let(:book) { current_organization.book }
11
12
 
12
13
  before { reindex_current_organization! }
13
14
 
@@ -18,7 +19,7 @@ feature 'public org', organization_workspace: :test do
18
19
  visit '/'
19
20
 
20
21
  expect(page).to have_text('ム mumuki')
21
- expect(page).to have_text(Organization.current.book.name)
22
+ expect(page).to have_text(current_organization.book.name)
22
23
  expect(page).not_to have_text('Exams')
23
24
  end
24
25
 
@@ -28,7 +29,7 @@ feature 'public org', organization_workspace: :test do
28
29
  visit '/'
29
30
 
30
31
  expect(page).to have_text('ム mumuki')
31
- expect(page).to have_text(Organization.current.book.name)
32
+ expect(page).to have_text(current_organization.book.name)
32
33
  end
33
34
  end
34
35
 
@@ -43,8 +44,8 @@ feature 'public org', organization_workspace: :test do
43
44
  visit '/'
44
45
 
45
46
  expect(page).to have_text('ム mumuki')
46
- expect(page).to have_text(Organization.current.book.name)
47
- expect(user.reload.last_organization).to eq Organization.current
47
+ expect(page).to have_text(current_organization.book.name)
48
+ expect(user.reload.last_organization).to eq current_organization
48
49
  expect(page).to have_text('Exams')
49
50
  end
50
51
 
@@ -54,8 +55,8 @@ feature 'public org', organization_workspace: :test do
54
55
  visit '/'
55
56
 
56
57
  expect(page).to have_text('ム mumuki')
57
- expect(page).to have_text(Organization.current.book.name)
58
- expect(user.reload.last_organization).to eq Organization.current
58
+ expect(page).to have_text(current_organization.book.name)
59
+ expect(user.reload.last_organization).to eq current_organization
59
60
  end
60
61
  end
61
62
  end
@@ -84,8 +84,9 @@ feature 'Standard Flow', organization_workspace: :test do
84
84
  end
85
85
 
86
86
  scenario 'visit messages tab' do
87
+ Organization.find_by_name('test').switch!
87
88
  problem.submit_solution! user, {content: 'something'}
88
- Message.import_from_json! message
89
+ Message.import_from_resource_h! message
89
90
  visit "/user#messages"
90
91
 
91
92
  expect(page).to_not have_text('It seems you don\'t have any messages yet!')
@@ -0,0 +1,20 @@
1
+ Mumukit::Login.configure do |config|
2
+ config.auth0 = struct
3
+ config.saml = struct
4
+
5
+ config.mucookie_domain = '.localmumuki.io'
6
+ config.mucookie_secret_key = 'abcde1213456123456'
7
+ config.mucookie_secret_salt = 'mucookie test secret salt'
8
+ config.mucookie_sign_salt = 'mucookie test sign salt'
9
+ end
10
+
11
+ OmniAuth.config.test_mode = true
12
+ OmniAuth.config.mock_auth[:developer] =
13
+ OmniAuth::AuthHash.new provider: 'developer',
14
+ uid: 'johndoe@test.com',
15
+ credentials: {},
16
+ info: {first_name: 'John', last_name: 'Doe', name: 'John Doe', nickname: 'johndoe'}
17
+
18
+ def set_current_user!(user)
19
+ allow_any_instance_of(ApplicationController).to receive(:current_user_uid).and_return(user.uid)
20
+ end
@@ -12,21 +12,21 @@ describe Book, organization_workspace: :test do
12
12
 
13
13
  let(:book) { Organization.current.book }
14
14
 
15
- let(:book_json) do
15
+ let(:book_resource_h) do
16
16
  {name: 'sample book',
17
17
  description: 'a sample book description',
18
18
  slug: 'mumuki/mumuki-sample-book',
19
19
  locale: 'en',
20
20
  chapters: [topic_1.slug, topic_2.slug],
21
21
  complements: complement_slugs,
22
- }.deep_stringify_keys
22
+ }
23
23
  end
24
24
 
25
- describe '#import_from_json!' do
25
+ describe '#import_from_resource_h!' do
26
26
  context 'when complements are present' do
27
27
  let(:complement_slugs) { [guide_2.slug, guide_1.slug] }
28
28
 
29
- before { book.import_from_json!(book_json) }
29
+ before { book.import_from_resource_h!(book_resource_h) }
30
30
 
31
31
  it { expect(book.name).to eq 'sample book' }
32
32
  it { expect(book.description).to eq 'a sample book description' }
@@ -41,7 +41,7 @@ describe Book, organization_workspace: :test do
41
41
  context 'when complements are not present' do
42
42
  let(:complement_slugs) { ['foo/bar', guide_1.slug] }
43
43
 
44
- before { book.import_from_json!(book_json) }
44
+ before { book.import_from_resource_h!(book_resource_h) }
45
45
 
46
46
  it { expect(book.complements.count).to eq 1 }
47
47
  end
@@ -10,7 +10,7 @@ describe 'CourseChanged', organization_workspace: :test do
10
10
  description: 'test course'}
11
11
  end
12
12
 
13
- let!(:course) { Course.import_from_json! course_json }
13
+ let!(:course) { Course.import_from_resource_h! course_json }
14
14
 
15
15
  it { expect(course.organization.courses).to include course }
16
16
  it { expect(course.organization.name).to eq 'test' }
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe '#as_platform_json', organization_workspace: :test do
3
+ describe '#to_resource_h', organization_workspace: :test do
4
4
  describe Assignment do
5
5
  let(:user) {
6
6
  create(:user,
@@ -30,7 +30,7 @@ describe '#as_platform_json', organization_workspace: :test do
30
30
 
31
31
  it { expect(lesson.number).to eq 4 }
32
32
  it do
33
- expect(assignment.as_platform_json).to json_like(
33
+ expect(assignment.to_resource_h).to json_like(
34
34
  status: :passed,
35
35
  result: nil,
36
36
  expectation_results: [],
@@ -89,7 +89,7 @@ describe '#as_platform_json', organization_workspace: :test do
89
89
  submission_id: 'abcd1234',
90
90
  exercise: exercise) }
91
91
  it do
92
- expect(assignment.as_platform_json).to json_like(
92
+ expect(assignment.to_resource_h).to json_like(
93
93
  status: :passed,
94
94
  result: nil,
95
95
  expectation_results: [],
@@ -144,7 +144,7 @@ describe '#as_platform_json', organization_workspace: :test do
144
144
  exercise: exercise) }
145
145
 
146
146
  it do
147
- expect(assignment.as_platform_json).to json_like(
147
+ expect(assignment.to_resource_h).to json_like(
148
148
  status: :passed,
149
149
  result: nil,
150
150
  expectation_results: [],
@@ -7,11 +7,11 @@ describe Exam, organization_workspace: :test do
7
7
  describe '#upsert' do
8
8
  let(:guide) { create(:guide) }
9
9
  let(:exam_json) { {eid: '1', slug: guide.slug, start_time: 5.minutes.ago, end_time: 10.minutes.since, duration: 150, language: 'haskell', name: 'foo', uids: [], organization: 'test'} }
10
- let!(:exam) { Exam.import_from_json! exam_json }
10
+ let!(:exam) { Exam.import_from_resource_h! exam_json }
11
11
  context 'when new exam and the guide is the same' do
12
12
  let(:guide2) { create(:guide) }
13
13
  let(:exam_json2) { {eid: '2', slug: guide.slug, start_time: 5.minutes.ago, end_time: 10.minutes.since, duration: 150, language: 'haskell', name: 'foo', uids: [], organization: 'test'} }
14
- let!(:exam2) { Exam.import_from_json! exam_json2 }
14
+ let!(:exam2) { Exam.import_from_resource_h! exam_json2 }
15
15
  context 'and the organization is the same' do
16
16
  it { expect(Exam.count).to eq 1 }
17
17
  it { expect(Usage.where(item_id: guide.id, parent_item_id: exam.id).count).to eq 0 }
@@ -28,7 +28,7 @@ describe Exam, organization_workspace: :test do
28
28
  it { expect(exam.enabled?).to be false }
29
29
 
30
30
  context 'not authorized' do
31
- it { expect { exam.validate_accessible_for! user }.to raise_error(Mumuki::Laboratory::ForbiddenError) }
31
+ it { expect { exam.validate_accessible_for! user }.to raise_error(Mumuki::Domain::ForbiddenError) }
32
32
  end
33
33
 
34
34
  context 'authorized' do
@@ -42,14 +42,14 @@ describe Exam, organization_workspace: :test do
42
42
  it { expect(exam.enabled?).to be true }
43
43
 
44
44
  context 'not authorized' do
45
- it { expect { exam.validate_accessible_for! user }.to raise_error(Mumuki::Laboratory::ForbiddenError) }
45
+ it { expect { exam.validate_accessible_for! user }.to raise_error(Mumuki::Domain::ForbiddenError) }
46
46
  end
47
47
 
48
48
  context 'authorized' do
49
49
  before { exam.authorize! user }
50
50
 
51
51
  it { expect { exam.validate_accessible_for! user }.to_not raise_error }
52
- it { expect { exam.validate_accessible_for! other_user }.to raise_error(Mumuki::Laboratory::ForbiddenError) }
52
+ it { expect { exam.validate_accessible_for! other_user }.to raise_error(Mumuki::Domain::ForbiddenError) }
53
53
  end
54
54
 
55
55
  context 'import_from_json' do
@@ -58,7 +58,7 @@ describe Exam, organization_workspace: :test do
58
58
  let(:guide) { create(:guide) }
59
59
  let(:duration) { 150 }
60
60
  let(:exam_json) { {eid: '1', slug: guide.slug, start_time: 5.minutes.ago, end_time: 10.minutes.since, duration: duration, language: 'haskell', name: 'foo', uids: [user.uid], organization: 'test'} }
61
- before { Exam.import_from_json! exam_json }
61
+ before { Exam.import_from_resource_h! exam_json }
62
62
 
63
63
  context 'new exam' do
64
64
  it { expect(Exam.count).to eq 1 }
@@ -73,10 +73,10 @@ describe Exam, organization_workspace: :test do
73
73
 
74
74
  context 'existing exam' do
75
75
  let(:exam_json2) { {eid: '1', slug: guide.slug, start_time: 5.minutes.ago, end_time: 10.minutes.since, duration: 150, language: 'haskell', name: 'foo', uids: [user2.uid], organization: 'test'} }
76
- before { Exam.import_from_json! exam_json2 }
76
+ before { Exam.import_from_resource_h! exam_json2 }
77
77
 
78
78
  it { expect(Exam.count).to eq 1 }
79
- it { expect { Exam.find_by(classroom_id: '1').validate_accessible_for! user }.to raise_error(Mumuki::Laboratory::ForbiddenError) }
79
+ it { expect { Exam.find_by(classroom_id: '1').validate_accessible_for! user }.to raise_error(Mumuki::Domain::ForbiddenError) }
80
80
  it { expect { Exam.find_by(classroom_id: '1').validate_accessible_for! user2 }.to_not raise_error }
81
81
  end
82
82
  end
@@ -85,7 +85,7 @@ describe Exam, organization_workspace: :test do
85
85
  let(:user) { create(:user, uid: 'auth0|1') }
86
86
  let(:guide) { create(:guide) }
87
87
  let(:exam_json) { {eid: '1', slug: guide.slug, start_time: 5.minutes.ago, end_time: 10.minutes.since, duration: duration, language: 'haskell', name: 'foo', uids: [user.uid], organization: 'test'} }
88
- let(:exam) { Exam.import_from_json! exam_json }
88
+ let(:exam) { Exam.import_from_resource_h! exam_json }
89
89
  before { exam.start! user }
90
90
 
91
91
  context 'with duration' do
@@ -111,9 +111,9 @@ describe Exam, organization_workspace: :test do
111
111
  let(:user) { create(:user, uid: 'auth0|1') }
112
112
  let(:guide) { create(:guide) }
113
113
  let(:exam_json) { {eid: '1', slug: guide.slug, start_time: 5.minutes.ago, end_time: 10.minutes.since, duration: 150, language: 'haskell', name: 'foo', uids: [user.uid], organization: 'test'} }
114
- let(:exam) { Exam.import_from_json! exam_json }
114
+ let(:exam) { Exam.import_from_resource_h! exam_json }
115
115
  before { exam.start! user }
116
- before { Exam.import_from_json! exam_json.merge(organization: 'test') }
116
+ before { Exam.import_from_resource_h! exam_json.merge(organization: 'test') }
117
117
 
118
118
  it { expect(exam.started?(user)).to be true }
119
119
 
@@ -122,9 +122,9 @@ describe Exam, organization_workspace: :test do
122
122
  context 'create exam with non existing user' do
123
123
  let(:guide) { create(:guide) }
124
124
  let(:exam_json) { {eid: '1', slug: guide.slug, start_time: 5.minutes.ago, end_time: 10.minutes.since, duration: 150, language: 'haskell', name: 'foo', uids: [user.uid], organization: 'test'} }
125
- let(:exam) { Exam.import_from_json! exam_json }
125
+ let(:exam) { Exam.import_from_resource_h! exam_json }
126
126
 
127
- it { expect { Exam.import_from_json! exam_json.merge(organization: 'test') }.not_to raise_error }
127
+ it { expect { Exam.import_from_resource_h! exam_json.merge(organization: 'test') }.not_to raise_error }
128
128
 
129
129
  end
130
130
 
@@ -132,7 +132,7 @@ describe Exam, organization_workspace: :test do
132
132
  let(:teacher) { create(:user, uid: 'auth0|1') }
133
133
  let(:guide) { create(:guide) }
134
134
  let(:exam_json) { {eid: '1', slug: guide.slug, start_time: 5.minutes.ago, end_time: 10.minutes.since, duration: 150, language: 'haskell', name: 'foo', uids: [], organization: 'test'} }
135
- let(:exam) { Exam.import_from_json! exam_json }
135
+ let(:exam) { Exam.import_from_resource_h! exam_json }
136
136
 
137
137
  context 'exam_authorization do not receive start method' do
138
138
  before { expect(teacher).to receive(:teacher_here?).and_return(true) }