mumuki-laboratory 8.2.1 → 8.6.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (106) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +19 -8
  3. data/app/assets/javascripts/mumuki_laboratory/application/bridge.js +2 -1
  4. data/app/assets/javascripts/mumuki_laboratory/application/button.js +0 -2
  5. data/app/assets/javascripts/mumuki_laboratory/application/codemirror.js +1 -1
  6. data/app/assets/javascripts/mumuki_laboratory/application/i18n.js +73 -0
  7. data/app/assets/javascripts/mumuki_laboratory/application/kids.js +22 -1
  8. data/app/assets/javascripts/mumuki_laboratory/application/kindergarten.js +6 -1
  9. data/app/assets/javascripts/mumuki_laboratory/application/primary.js +5 -3
  10. data/app/assets/javascripts/mumuki_laboratory/application/results-renderer.js +28 -1
  11. data/app/assets/javascripts/mumuki_laboratory/application/submission.js +72 -48
  12. data/app/assets/javascripts/mumuki_laboratory/application/upload.js +69 -14
  13. data/app/assets/stylesheets/mumuki_laboratory/application.scss +1 -0
  14. data/app/assets/stylesheets/mumuki_laboratory/application/_codemirror-themes.scss +1 -0
  15. data/app/assets/stylesheets/mumuki_laboratory/application/codemirror-themes/_mu-light.scss +3 -0
  16. data/app/assets/stylesheets/mumuki_laboratory/application/modules/_content_show.scss +1 -1
  17. data/app/assets/stylesheets/mumuki_laboratory/application/modules/_discussion.scss +31 -8
  18. data/app/assets/stylesheets/mumuki_laboratory/application/modules/_kids.scss +4 -0
  19. data/app/assets/stylesheets/mumuki_laboratory/application/modules/_kids_results.scss +1 -0
  20. data/app/assets/stylesheets/mumuki_laboratory/application/modules/_terms.scss +4 -0
  21. data/app/controllers/application_controller.rb +1 -1
  22. data/app/controllers/chapters_controller.rb +9 -5
  23. data/app/controllers/exam_authorization_requests_controller.rb +26 -0
  24. data/app/controllers/exam_registrations_controller.rb +6 -0
  25. data/app/controllers/guide_container_controller.rb +2 -7
  26. data/app/helpers/application_helper.rb +4 -0
  27. data/app/helpers/contextualization_result_helper.rb +0 -8
  28. data/app/helpers/discussions_helper.rb +8 -0
  29. data/app/helpers/exercise_input_helper.rb +8 -17
  30. data/app/helpers/icons_helper.rb +3 -11
  31. data/app/helpers/menu_bar_helper.rb +6 -2
  32. data/app/helpers/overlapped_buttons_helper.rb +10 -6
  33. data/app/helpers/progress_bar_helper.rb +2 -2
  34. data/app/views/book_discussions/index.html.erb +3 -1
  35. data/app/views/chapters/show.html.erb +21 -9
  36. data/app/views/complements/show.html.erb +1 -1
  37. data/app/views/discussions/_message.html.erb +7 -7
  38. data/app/views/discussions/index.html.erb +11 -4
  39. data/app/views/exam_authorization_requests/show.html.erb +17 -0
  40. data/app/views/exam_registrations/show.html.erb +37 -0
  41. data/app/views/exams/show.html.erb +1 -1
  42. data/app/views/exercises/show.html.erb +2 -2
  43. data/app/views/layouts/_discussions.html.erb +0 -4
  44. data/app/views/layouts/_guide.html.erb +4 -33
  45. data/app/views/layouts/_guide_container.html.erb +28 -0
  46. data/app/views/layouts/_guide_title_icons.html.erb +9 -0
  47. data/app/views/layouts/_progress_bar.html.erb +9 -7
  48. data/app/views/layouts/_progress_listing.html.erb +5 -5
  49. data/app/views/layouts/_social_media.html.erb +2 -2
  50. data/app/views/layouts/application.html.erb +4 -7
  51. data/app/views/layouts/exercise_inputs/editors/_upload.html.erb +11 -2
  52. data/app/views/layouts/exercise_inputs/layouts/_input_kindergarten.html.erb +1 -1
  53. data/app/views/layouts/modals/_kindergarten_results_aborted.html.erb +1 -1
  54. data/app/views/lessons/show.html.erb +1 -1
  55. data/app/views/notifications/_discussion.html.erb +1 -0
  56. data/app/views/notifications/_dropdown.html.erb +13 -0
  57. data/app/views/notifications/_exam_authorization_request.html.erb +1 -0
  58. data/app/views/notifications/_exam_registration.html.erb +1 -0
  59. data/app/views/notifications/_message.html.erb +1 -0
  60. data/app/views/users/_term.html.erb +1 -1
  61. data/app/views/users/terms.html.erb +1 -1
  62. data/config/routes.rb +3 -0
  63. data/lib/mumuki/laboratory/controllers/notifications.rb +3 -22
  64. data/lib/mumuki/laboratory/controllers/results_rendering.rb +2 -1
  65. data/lib/mumuki/laboratory/locales/en.yml +34 -24
  66. data/lib/mumuki/laboratory/locales/es-CL.yml +25 -10
  67. data/lib/mumuki/laboratory/locales/es.yml +32 -23
  68. data/lib/mumuki/laboratory/locales/pt.yml +27 -17
  69. data/lib/mumuki/laboratory/version.rb +1 -1
  70. data/spec/controllers/exam_authorization_requests_controller_spec.rb +40 -0
  71. data/spec/controllers/exam_registrations_controller_spec.rb +19 -0
  72. data/spec/controllers/exercise_solutions_controller_spec.rb +3 -2
  73. data/spec/dummy/db/schema.rb +50 -1
  74. data/spec/dummy/public/character/animations.json +1 -0
  75. data/{public → spec/dummy/public}/character/kibi/context.svg +0 -0
  76. data/{public → spec/dummy/public}/character/kibi/failure.svg +0 -0
  77. data/{public → spec/dummy/public}/character/kibi/jump.svg +0 -0
  78. data/spec/dummy/public/character/kibi/passed_with_warnings.svg +4 -0
  79. data/{public → spec/dummy/public}/character/kibi/success2_l.svg +0 -0
  80. data/{public → spec/dummy/public}/character/kibi/success_l.svg +0 -0
  81. data/{public → spec/dummy/public}/character/magnifying_glass/apparition.svg +0 -0
  82. data/{public → spec/dummy/public}/character/magnifying_glass/loop.svg +0 -0
  83. data/spec/features/chapters_flow_spec.rb +112 -0
  84. data/spec/features/login_flow_spec.rb +1 -1
  85. data/spec/features/notifications_flow_spec.rb +46 -0
  86. data/spec/features/profile_flow_spec.rb +1 -2
  87. data/spec/features/terms_flow_spec.rb +30 -0
  88. data/spec/features/topic_flow_spec.rb +0 -1
  89. data/spec/javascripts/bridge-spec.js +2 -2
  90. data/spec/javascripts/csrf-token-spec.js +2 -2
  91. data/spec/javascripts/editors-spec.js +7 -9
  92. data/spec/javascripts/elipsis-spec.js +4 -4
  93. data/spec/javascripts/events-spec.js +7 -7
  94. data/spec/javascripts/exercise-spec.js +7 -8
  95. data/spec/javascripts/global-spec.js +3 -3
  96. data/spec/javascripts/i18n-spec.js +82 -0
  97. data/spec/javascripts/kids-button-spec.js +34 -0
  98. data/spec/javascripts/results-renderers-spec.js +5 -5
  99. data/spec/javascripts/speech-bubble-renderer-spec.js +2 -3
  100. data/spec/javascripts/submissions-store-spec.js +14 -14
  101. data/spec/javascripts/sync-mode-spec.js +3 -3
  102. data/spec/javascripts/timeout-spec.js +2 -2
  103. data/spec/javascripts/timer-spec.js +2 -2
  104. data/spec/javascripts/upload-spec.js +80 -0
  105. metadata +131 -96
  106. data/spec/features/chapter_spec.rb +0 -70
@@ -12,7 +12,7 @@ es:
12
12
  age: Edad
13
13
  all: Todos
14
14
  and: y
15
- appendix: "Apéndice"
15
+ appendix: Apéndice
16
16
  appendix_teaser: ¿Querés saber más? <a href="%{link}">Consultá el apéndice de este capítulo</a>
17
17
  approved_message: Validado por mentor
18
18
  are_you_sure: '¿Estás seguro que querés %{action}?'
@@ -25,7 +25,7 @@ es:
25
25
  one: '1 intento restante'
26
26
  other: '%{count} intentos restantes'
27
27
  author: Autor
28
- authoring: "Autores"
28
+ authoring: Autores
29
29
  authoring_note_html: Esta guía fue desarrollada por %{authors} bajo los términos de la <a href="https://creativecommons.org/licenses/by-sa/4.0/" target="_blank">Licencia Creative Commons Compartir-Igual, 4.0</a>.
30
30
  authoring_note_with_collaborators_html: Esta guía fue desarrollada por %{authors} y <a href="%{collaborators}" target="_blank">muchas personas más</a>, bajo los términos de la <a href="https://creativecommons.org/licenses/by-sa/4.0/" target="_blank">Licencia Creative Commons Compartir-Igual, 4.0</a>.
31
31
  back_to_mumuki: ¡Volvé a Mumuki!
@@ -45,8 +45,6 @@ es:
45
45
  closed_count:
46
46
  one: 1 cerrada
47
47
  other: '%{count} cerradas'
48
- created_at_asc: Antiguas
49
- created_at_desc: Nuevas
50
48
  comment: Comentar
51
49
  confirm: Confirmar
52
50
  confirm_reset: Estás por reiniciar tu ejercicio. ¿Querés continuar?
@@ -54,12 +52,14 @@ es:
54
52
  console: Consola
55
53
  contact_administrator: 'Si pensás que es un error, comunicate con %{link}'
56
54
  content: Contenido
57
- continue_exercise: "Continuar"
55
+ continue_exercise: Continuar
58
56
  continue_lesson: ¡Continuá esta lección!
59
57
  continue_practicing: ¡Seguí aprendiendo!
60
58
  correct_answer: ¡La respuesta es correcta!
61
59
  create_submission: Enviar
62
60
  created_at: Creado
61
+ created_at_asc: Antiguas
62
+ created_at_desc: Nuevas
63
63
  created_exercises: Ejercicios Creados
64
64
  created_guides: Lecciones Creadas
65
65
  date: Fecha
@@ -73,6 +73,7 @@ es:
73
73
  disabled_organization_explanation: Este recorrido ha finalizado
74
74
  discussion_description_placeholder: Podés agregar información para detallar más tu consulta
75
75
  discussion_updated: Consulta actualizada
76
+ new_discussion_message: Mensaje nuevo en %{title}
76
77
  discussions: Consultas
77
78
  dont_leave_us: ¡No nos abandones! Aprender a programar es divertido. Sólo tenés que seguir practicando.
78
79
  download: "Descargá lo que hiciste"
@@ -86,13 +87,22 @@ es:
86
87
  error_404: error 404
87
88
  error_410: error 410
88
89
  error_500: error 500
89
- errored: ¡Ups! Tu solución no se puede ejecutar
90
90
  error:
91
91
  title:
92
92
  forbidden: No tenés autorización para ver este contenido
93
93
  gone: ¡Ups! El contenido expiró
94
94
  internal_server_error: ¡Ups! Algo no anduvo bien
95
95
  not_found: ¡Ups! La página no existe
96
+ errored: ¡Ups! Tu solución no se puede ejecutar
97
+ exam_authorization_request_approved_html: Tu solicitud fue aprobada, no olvides conectarte el <strong>%{date}</strong>. ¡Buena suerte!
98
+ exam_authorization_request_created: ¡Tu inscripción al exámen se registró exitosamente!
99
+ exam_authorization_request_rejected: Tu solicitud fue rechazada.
100
+ exam_authorization_request_saved: ¡Tu inscripción al exámen se modificó exitosamente!
101
+ exam_authorization_request_updated: Hay novedades sobre tu inscripción a %{description}
102
+ exam_registration_choose_exam: Seleccioná día y horario en el que te gustaría rendir el exámen
103
+ exam_registration_explanation_html: Tenés tiempo hasta el <strong>%{date}</strong> para inscribirte. Pasada esa fecha, tu solicitud será evaluada y recibirás una confirmación. <br> ¡No te olvides de revisar las notificaciones!
104
+ exam_registration_open: ¡Ya podés inscribirte a %{description}!
105
+ exam_registration_to: Inscripción a %{description}
96
106
  exams: Exámenes
97
107
  exercise: Ejercicio
98
108
  exercise_count: ejercicios
@@ -107,13 +117,15 @@ es:
107
117
  failed: Tu solución no pasó las pruebas
108
118
  feedback: Problemas que encontramos
109
119
  female: Mujer
120
+ file_exceeds_max_size: "El tamaño de archivo no debe exceder %{size_kb}kb. Por favor seleccioná otro archivo."
110
121
  finish: Terminar
111
122
  first_name: Nombre
112
123
  forbidden_explanation: ¿Puede que hayas ingresado con una cuenta incorrecta?
113
124
  format: Dar formato
114
- forum_terms: Reglas del espacio de consultas
115
- forum_terms_link: Si tenés alguna duda, accedé a las %{terms_link}
116
- fullscreen: "Pantalla completa"
125
+ forum: Espacio de Consultas
126
+ forum_terms: Reglas del Espacio de Consultas
127
+ forum_terms_link: No olvides que al participar debés cumplir las %{terms_link}
128
+ fullscreen: "Pantalla completa (F11)"
117
129
  gender: Género
118
130
  get_messages: "Ver mensajes"
119
131
  go_to: 'Ir a %{organization}'
@@ -129,21 +141,16 @@ es:
129
141
  home: Inicio
130
142
  hour: hora
131
143
  hours: horas
144
+ important_info: Información importante
132
145
  initial_state: Tablero inicial
133
146
  insert_file_name: Ingresa un nombre de archivo
134
147
  invitation: Invitación a curso
135
148
  invitation_for: 'Unirse a %{course}'
136
- item_not_accessible: "No tenés permisos para acceder a este contenido"
149
+ item_not_accessible: No tenés permisos para acceder a este contenido
137
150
  its_been_a_while: Hace un tiempo que no usás Mumuki.
138
151
  joining_html: '¡Te damos la bienvenida al curso <strong>%{course}</strong>!'
139
152
  keep_learning: ¡Seguí aprendiendo!
140
- kids_default_success: "¡Lo hiciste muy bien!"
141
- kindergarten_passed: "¡Tu programa está muy bien!"
142
- kindergarten_passed_with_warnings: "¡Tu programa está muy bien!"
143
- kindergarten_pending: "Hay un error en tu programa. ¡Intentá de nuevo!"
144
- kindergarten_failed: "Hay un error en tu programa. ¡Intentá de nuevo!"
145
- kindergarten_errored: "Hay un error en tu programa. ¡Intentá de nuevo!"
146
- kindergarten_aborted: "¡Ups! Hubo un problema técnico"
153
+ kids_default_success: ¡Lo hiciste muy bien!
147
154
  language: Lenguaje
148
155
  languages: Lenguajes
149
156
  last_name: Apellido
@@ -172,8 +179,9 @@ es:
172
179
  messages_error: Los mensajes anteriores no están disponibles en este momento. ¡Volvé a intentar mas tarde!
173
180
  minute: minuto
174
181
  minutes: minutos
175
- more_messages: Ver mensajes anteriores
182
+ moderation: Mentoría
176
183
  moderator: Mentor
184
+ more_messages: Ver mensajes anteriores
177
185
  my_doubts: Mis consultas
178
186
  name: Nombre
179
187
  navigation_continue: 'Siguiente %{kind}: %{sibling}'
@@ -183,9 +191,10 @@ es:
183
191
  need_help: No entiendo, ¡necesito ayuda!
184
192
  never: nunca
185
193
  new: Nuevo
186
- new_message: ¿Tenés dudas? ¡Levantá la mano!
187
194
  new_discussion: Nueva consulta
195
+ new_message: ¿Tenés dudas? ¡Levantá la mano!
188
196
  new_message_placeholder: Escribí el mensaje para tu docente acá...
197
+ new_message_received: Tenés un nuevo mensaje de %{sender}
189
198
  next_exercise: Siguiente
190
199
  next_guide: 'Siguiente Lección: %{name}'
191
200
  no_discussions: No encontramos consultas que coincidan con tu búsqueda.
@@ -199,6 +208,7 @@ es:
199
208
  not_found: ¡La página que buscaste no existe!
200
209
  not_found_explanation: Fijate si escribiste bien la dirección.
201
210
  not_in_any_organizations: ¡Parece que no estás en ninguna organización todavía!
211
+ notifications: Notificaciones
202
212
  notify_problem_with_exercise: Reportá un bug
203
213
  office: Secretaría
204
214
  only_landscape_support: Por favor, rotá tu tablet o celular para realizar ejercicios
@@ -242,6 +252,7 @@ es:
242
252
  running: procesando
243
253
  save: Guardar
244
254
  see_context: Mirá la animación del principio
255
+ select_file: Seleccionar archivo
245
256
  send: Enviar
246
257
  sending_solution: Enviando solución
247
258
  show: Mostrar
@@ -271,20 +282,20 @@ es:
271
282
  start_using_mumuki: ¡Empezá a usar Mumuki!
272
283
  status: Estado
273
284
  stop_emails?: ¿Querés dejar de recibir estos mails?
274
- subscribe: Recibir notificaciones
275
285
  submission: solución
276
286
  submission_date: Fecha de envío
277
287
  submission_for_exercise: Solucion para ejercicio
278
288
  submissions: Soluciones
279
289
  submissions_count: Soluciones
280
290
  submissions_for: Soluciones para %{exercise}
291
+ subscribe: Recibir notificaciones
281
292
  tag: Etiquetas
282
293
  task: Consigna
283
294
  teacher_info: Información para docentes
284
295
  tell_us_how: ¡Contanos cómo te pasó esto!
285
296
  tell_us_if_our_error: Si pensás que es un error nuestro, %{issues}
286
297
  terms_accepted: Los términos y condiciones fueron aceptados
287
- terms_and_conditions: Términos y condiciones
298
+ terms_and_conditions: Términos y Condiciones
288
299
  terms_and_conditions_continue_disclaimer: Al continuar estás aceptando los %{terms_link}
289
300
  terms_and_conditions_must_be_accepted: Tenés que aceptar los términos y condiciones
290
301
  test_results: Resultados de las pruebas
@@ -304,7 +315,6 @@ es:
304
315
  unprepared_organization_explanation: Este recorrido aún no ha comenzado
305
316
  unsubscribe: Dejar de recibir notificaciones
306
317
  unsubscribed_successfully: Te desuscribiste exitosamente de los recordatorios.
307
- upload_solution: "Subir solución"
308
318
  uploading_solution: "Subiendo solución"
309
319
  upvote: Es útil
310
320
  upvotes_count_desc: Más útiles
@@ -327,4 +337,3 @@ es:
327
337
  you_must_sign_in_before_submitting: Tenés que iniciar sesión antes de empezar a enviar tus soluciones
328
338
  you_never_submitted_solutions: Parece que nunca enviaste soluciones desde que creaste tu cuenta.
329
339
  your_new_organization: tu nueva organización
330
-
@@ -69,6 +69,7 @@ pt:
69
69
  disabled_explanation: Você está tentando acessar um recurso que foi desativado ou removido permanentemente
70
70
  disabled_organization_explanation: Este curso terminou
71
71
  discussion_description_placeholder: Você pode adicionar mais informações sobre sua dúvida
72
+ new_discussion_message: Nova mensagem em %{title}
72
73
  discussion_updated: Consulta actualizada
73
74
  discussions: Consultas
74
75
  download: Faça o download do que você fez
@@ -76,19 +77,28 @@ pt:
76
77
  edit_profile: Editar perfil
77
78
  editor_placeholder: ... Escreva sua solução aqui ...
78
79
  email: E-mail
79
- error_description: Isto é o que é conhecido como <span class = "error-link"> %{error} </ span>.
80
- error_401: erro 401
81
- error_403: erro 403
82
- error_404: erro 404
83
- error_410: erro 410
84
- error_500: erro 500
85
- errored: Opa! Sua solução não pode ser executada
86
80
  error:
87
81
  title:
88
82
  forbidden: Você não tem autorização para ver esse conteúdo
89
83
  gone: Opa! O conteúdo expirou
90
84
  internal_server_error: Opa! Algo não estava certo
91
85
  not_found: Opa! A página que você pesquisou não existe
86
+ error_401: erro 401
87
+ error_403: erro 403
88
+ error_404: erro 404
89
+ error_410: erro 410
90
+ error_500: erro 500
91
+ error_description: Isto é o que é conhecido como <span class = "error-link"> %{error} </ span>.
92
+ errored: Opa! Sua solução não pode ser executada
93
+ exam_authorization_request_approved_html: Sua solicitação foi aprovada, não se esqueça de conectar em <strong>%{date}</strong>. Boa sorte!
94
+ exam_authorization_request_created: Seu registro de exame foi salvo com sucesso!
95
+ exam_authorization_request_rejected: Seu pedido foi rejeitado.
96
+ exam_authorization_request_saved: Seu registro de exame foi modificado com sucesso!
97
+ exam_authorization_request_updated: Há notícias sobre seu registro para %{description}
98
+ exam_registration_choose_exam: Selecione o dia e a hora em que gostaria de fazer o exame
99
+ exam_registration_explanation_html: Você tem tempo até <strong>%{date}</strong> para se inscrever. Após essa data, sua inscrição será avaliada e você receberá uma confirmação. <br> Não se esqueça de verificar as notificações!
100
+ exam_registration_open: "¡Inscrições abertas para %{description}!"
101
+ exam_registration_to: Inscrição a %{description}
92
102
  exams: Examesca
93
103
  exercise: Exercício
94
104
  exercise_count: exercícios
@@ -103,13 +113,15 @@ pt:
103
113
  failed: Sua solução não passou as provas
104
114
  feedback: Problemas que encontramos
105
115
  female: Feminino
116
+ file_exceeds_max_size: "O tamanho do arquivo não deve exceder %{size_kb}kb. Selecione outro arquivo."
106
117
  finish: Terminar
107
118
  first_name: Nome
108
119
  forbidden_explanation: Você poderia ter entrado com uma conta incorreta?
109
120
  format: Formato
110
- forum_terms: Regras do espaço de consulta
121
+ forum: Espaço de Consulta
122
+ forum_terms: Regras do Espaço de Consulta
111
123
  forum_terms_link: Se você tiver alguma dúvida, consulte as %{terms_link}
112
- fullscreen: Tela completa
124
+ fullscreen: Tela cheia (F11)
113
125
  gender: Gênero
114
126
  get_messages: Ver mensagens
115
127
  go_to: Vá para %{organization}
@@ -125,6 +137,7 @@ pt:
125
137
  home: Home
126
138
  hour: hora
127
139
  hours: horas
140
+ important_info: Informação importante
128
141
  initial_state: Tabuleiro inicial
129
142
  insert_file_name: Insira um nome de arquivo
130
143
  invitation: Convite para o curso
@@ -132,12 +145,6 @@ pt:
132
145
  item_not_accessible: Você não tem permissões para acessar este conteúdo
133
146
  joining_html: Bem-vindo ao curso <strong> %{curso} </strong>!
134
147
  kids_default_success: Você fez muito bem!
135
- kindergarten_passed: "O seu programa é muito bom!"
136
- kindergarten_passed_with_warnings: "O seu programa é muito bom!"
137
- kindergarten_pending: "Houve um erro no seu programa. Tenta novamente!"
138
- kindergarten_failed: "Houve um erro no seu programa. Tenta novamente!"
139
- kindergarten_errored: "Houve um erro no seu programa. Tenta novamente!"
140
- kindergarten_aborted: "Opa! Houve um problema técnico"
141
148
  language: Linguagem
142
149
  languages: Linguagens
143
150
  last_name: Sobrenome
@@ -166,8 +173,9 @@ pt:
166
173
  messages_error: As mensagens acima não estão disponíveis no momento. Eu tentei novamente mais tarde!
167
174
  minute: minuto
168
175
  minutes: minutos
169
- more_messages: Ver as mensagens anteriores
176
+ moderation: Mentoria
170
177
  moderator: Mentor
178
+ more_messages: Ver as mensagens anteriores
171
179
  my_doubts: Minhas duvidas
172
180
  name: Nome
173
181
  navigation_continue: "Próximo %{kind}: %{sibling}"
@@ -179,6 +187,7 @@ pt:
179
187
  new: Novo
180
188
  new_message: Você tem dúvidas? Levante a mão!
181
189
  new_message_placeholder: Escreva sua mensagem para o seu professor aqui ...
190
+ new_message_received: Você tem uma nova mensagem de %{sender}
182
191
  next_exercise: Em seguida
183
192
  next_guide: Próxima Lição %{nome}
184
193
  no_discussions: Não encontramos consultas que correspondam à sua pesquisa.
@@ -192,6 +201,7 @@ pt:
192
201
  not_found: A página que você pesquisou não existe!
193
202
  not_found_explanation: Olhe se você escreveu o endereço corretamente.
194
203
  not_in_any_organizations: Parece que você ainda não está em nenhuma organização!
204
+ notifications: Notificações
195
205
  notify_problem_with_exercise: Relatar um erro
196
206
  office: Secretariado
197
207
  only_landscape_support: Por favor, gire seu tablet ou celular para realizar exercícios
@@ -231,6 +241,7 @@ pt:
231
241
  running: processamento
232
242
  save: Salvar
233
243
  see_context: Veja a animação desde o início
244
+ select_file: Selecione o arquivo
234
245
  send: Enviar
235
246
  sending_solution: Solução de envio
236
247
  show: Mostrar
@@ -287,7 +298,6 @@ pt:
287
298
  unmeet_expectations: Objetivos que não foram atendidos
288
299
  unprepared_organization_explanation: Este curso ainda não começou
289
300
  unsubscribe: Cancelar subscrição
290
- upload_solution: Carregar solução
291
301
  uploading_solution: Uploading solution
292
302
  user: Usuário
293
303
  user_data_updated: Os seus dados foram atualizados corretamente
@@ -1,5 +1,5 @@
1
1
  module Mumuki
2
2
  module Laboratory
3
- VERSION = '8.2.1'
3
+ VERSION = '8.6.1'
4
4
  end
5
5
  end
@@ -0,0 +1,40 @@
1
+ require 'spec_helper'
2
+
3
+ describe ExamAuthorizationRequestsController, type: :controller, organization_workspace: :test do
4
+ let(:user) { create(:user) }
5
+ let(:exam) { create(:exam) }
6
+ let(:exam_registration) { create(:exam_registration, exams: [exam]) }
7
+
8
+ before { set_current_user! user }
9
+
10
+ describe 'show' do
11
+ context 'when authorization does not exist' do
12
+ before { get :show, params: {id: 0} }
13
+ it { expect(response.status).to eq 404 }
14
+ end
15
+
16
+ context 'when authorization exists' do
17
+ let(:exam_authorization_request) { create(:exam_authorization_request, user: user, exam_registration: exam_registration) }
18
+ let!(:notification) { create(:notification, target: exam_authorization_request, user: user) }
19
+
20
+ before { get :show, params: {id: exam_authorization_request.id} }
21
+
22
+ it { expect(response.status).to eq 200 }
23
+ it { expect(notification.reload.read).to be_truthy }
24
+ end
25
+ end
26
+
27
+ describe 'create' do
28
+ let!(:notification) { create(:notification, target: exam_registration, user: user) }
29
+
30
+ before do
31
+ post :create, params: {
32
+ exam_authorization_request: { exam_id: exam.id, exam_registration_id: exam_registration.id }
33
+ }
34
+ end
35
+
36
+ it { expect(response.status).to eq 204 }
37
+ it { expect(exam_registration.authorization_requests.length).to be 1 }
38
+ it { expect(notification.reload.read).to be_truthy }
39
+ end
40
+ end
@@ -0,0 +1,19 @@
1
+ require 'spec_helper'
2
+
3
+ describe ExamRegistrationsController, type: :controller, organization_workspace: :test do
4
+ describe 'show' do
5
+ context 'when registration does not exist' do
6
+ before { get :show, params: {id: 0} }
7
+
8
+ it { expect(response.status).to eq 404 }
9
+ end
10
+
11
+ context 'when registration exists' do
12
+ let!(:registration) { create(:exam_registration) }
13
+
14
+ before { get :show, params: {id: registration.id} }
15
+
16
+ it { expect(response.status).to eq 200 }
17
+ end
18
+ end
19
+ end
@@ -62,7 +62,7 @@ describe ExerciseSolutionsController, organization_workspace: :test do
62
62
  it { expect(assignment.solution).to eq('the content')}
63
63
 
64
64
  it { expect(response.body).to json_eq({ status: :failed, guide_finished_by_solution: false },
65
- except: [:html, :remaining_attempts_html, :current_exp]) }
65
+ except: [:html, :remaining_attempts_html, :current_exp, :in_gamified_context]) }
66
66
 
67
67
  it 'does not include kids specific renders' do
68
68
  body = JSON.parse(response.body)
@@ -89,7 +89,8 @@ describe ExerciseSolutionsController, organization_workspace: :test do
89
89
 
90
90
  it { expect(response.body).to json_eq({ status: :failed, guide_finished_by_solution: false },
91
91
  except: [:html, :remaining_attempts_html, :title_html, :button_html,
92
- :expectations, :test_results, :tips, :current_exp, :level_up_html]) }
92
+ :expectations, :test_results, :tips, :current_exp,
93
+ :level_up_html, :in_gamified_context]) }
93
94
 
94
95
  it 'includes kids specific renders' do
95
96
  body = JSON.parse(response.body)
@@ -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: 20201130163114) do
13
+ ActiveRecord::Schema.define(version: 20210119190204) do
14
14
 
15
15
  # These are extensions that must be enabled in order to support this database
16
16
  enable_extension "plpgsql"
@@ -134,6 +134,20 @@ ActiveRecord::Schema.define(version: 20201130163114) do
134
134
  t.index ["status_updated_by_id"], name: "index_discussions_on_status_updated_by_id"
135
135
  end
136
136
 
137
+ create_table "exam_authorization_requests", force: :cascade do |t|
138
+ t.integer "status", default: 0
139
+ t.bigint "exam_id"
140
+ t.bigint "exam_registration_id"
141
+ t.bigint "user_id"
142
+ t.bigint "organization_id"
143
+ t.datetime "created_at", null: false
144
+ t.datetime "updated_at", null: false
145
+ t.index ["exam_id"], name: "index_exam_authorization_requests_on_exam_id"
146
+ t.index ["exam_registration_id"], name: "index_exam_authorization_requests_on_exam_registration_id"
147
+ t.index ["organization_id"], name: "index_exam_authorization_requests_on_organization_id"
148
+ t.index ["user_id"], name: "index_exam_authorization_requests_on_user_id"
149
+ end
150
+
137
151
  create_table "exam_authorizations", force: :cascade do |t|
138
152
  t.integer "exam_id"
139
153
  t.integer "user_id"
@@ -143,6 +157,25 @@ ActiveRecord::Schema.define(version: 20201130163114) do
143
157
  t.index ["user_id"], name: "index_exam_authorizations_on_user_id"
144
158
  end
145
159
 
160
+ create_table "exam_registrations", force: :cascade do |t|
161
+ t.string "description"
162
+ t.datetime "start_time", null: false
163
+ t.datetime "end_time", null: false
164
+ t.integer "authorization_criterion_type", default: 0
165
+ t.integer "authorization_criterion_value"
166
+ t.bigint "organization_id"
167
+ t.datetime "created_at", null: false
168
+ t.datetime "updated_at", null: false
169
+ t.index ["organization_id"], name: "index_exam_registrations_on_organization_id"
170
+ end
171
+
172
+ create_table "exam_registrations_exams", id: false, force: :cascade do |t|
173
+ t.bigint "exam_id", null: false
174
+ t.bigint "exam_registration_id", null: false
175
+ t.index ["exam_id"], name: "index_exam_registrations_exams_on_exam_id"
176
+ t.index ["exam_registration_id"], name: "index_exam_registrations_exams_on_exam_registration_id"
177
+ end
178
+
146
179
  create_table "exams", id: :serial, force: :cascade do |t|
147
180
  t.integer "organization_id"
148
181
  t.integer "guide_id"
@@ -314,6 +347,20 @@ ActiveRecord::Schema.define(version: 20201130163114) do
314
347
  t.boolean "not_actually_a_question", default: false
315
348
  end
316
349
 
350
+ create_table "notifications", force: :cascade do |t|
351
+ t.integer "priority", default: 100
352
+ t.boolean "read", default: false
353
+ t.string "target_type"
354
+ t.bigint "target_id"
355
+ t.bigint "user_id"
356
+ t.bigint "organization_id"
357
+ t.datetime "created_at", null: false
358
+ t.datetime "updated_at", null: false
359
+ t.index ["organization_id"], name: "index_notifications_on_organization_id"
360
+ t.index ["target_type", "target_id"], name: "index_notifications_on_target_type_and_target_id"
361
+ t.index ["user_id"], name: "index_notifications_on_user_id"
362
+ end
363
+
317
364
  create_table "organizations", id: :serial, force: :cascade do |t|
318
365
  t.string "name"
319
366
  t.integer "book_id"
@@ -329,6 +376,7 @@ ActiveRecord::Schema.define(version: 20201130163114) do
329
376
  t.text "display_description"
330
377
  t.boolean "wins_page"
331
378
  t.boolean "immersible"
379
+ t.boolean "prevent_manual_evaluation_content"
332
380
  t.index ["book_id"], name: "index_organizations_on_book_id"
333
381
  t.index ["name"], name: "index_organizations_on_name", unique: true
334
382
  end
@@ -434,6 +482,7 @@ ActiveRecord::Schema.define(version: 20201130163114) do
434
482
  t.datetime "legal_terms_accepted_at"
435
483
  t.datetime "forum_terms_accepted_at"
436
484
  t.boolean "banned_from_forum"
485
+ t.boolean "uppercase_mode"
437
486
  t.index ["avatar_type", "avatar_id"], name: "index_users_on_avatar_type_and_avatar_id"
438
487
  t.index ["disabled_at"], name: "index_users_on_disabled_at"
439
488
  t.index ["last_organization_id"], name: "index_users_on_last_organization_id"