mumuki-laboratory 7.10.3 → 7.12.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +26 -7
- data/Rakefile +9 -2
- data/app/assets/javascripts/mumuki_laboratory/application/bridge.js +26 -5
- data/app/assets/javascripts/mumuki_laboratory/application/gamification.js +85 -0
- data/app/assets/javascripts/mumuki_laboratory/application/kindergarten.js +145 -0
- data/app/assets/javascripts/mumuki_laboratory/application/profile.js +31 -16
- data/app/assets/javascripts/mumuki_laboratory/application/submission.js +1 -0
- data/app/assets/javascripts/mumuki_laboratory/application/submissions-store.js +19 -2
- data/app/assets/stylesheets/mumuki_laboratory/application/_errors.scss +3 -4
- data/app/assets/stylesheets/mumuki_laboratory/application/_modules.scss +3 -1
- data/app/assets/stylesheets/mumuki_laboratory/application/modules/_avatar.scss +21 -0
- data/app/assets/stylesheets/mumuki_laboratory/application/modules/{_chapter_show.scss → _content_show.scss} +0 -0
- data/app/assets/stylesheets/mumuki_laboratory/application/modules/_kindergarten.scss +401 -12
- data/app/assets/stylesheets/mumuki_laboratory/application/modules/_medal.scss +48 -0
- data/app/assets/stylesheets/mumuki_laboratory/application/modules/_terms.scss +44 -0
- data/app/assets/stylesheets/mumuki_laboratory/application/modules/_user_profile.scss +9 -0
- data/app/controllers/application_controller.rb +15 -8
- data/app/controllers/book_discussions_controller.rb +4 -0
- data/app/controllers/users_controller.rb +8 -2
- data/app/helpers/application_helper.rb +2 -2
- data/app/helpers/avatar_helper.rb +11 -3
- data/app/helpers/kindergarten_helper.rb +5 -0
- data/app/helpers/links_helper.rb +8 -0
- data/app/helpers/medal_helper.rb +36 -0
- data/app/helpers/open_graph_helper.rb +2 -2
- data/app/helpers/organization_list_helper.rb +1 -1
- data/app/helpers/overlapped_buttons_helper.rb +1 -1
- data/app/helpers/page_title_helper.rb +2 -2
- data/app/helpers/profile_helper.rb +9 -1
- data/app/views/book/_header.html.erb +17 -0
- data/app/views/book/show.html.erb +1 -18
- data/app/views/discussions/terms.html.erb +10 -0
- data/app/views/exercises/show.html.erb +1 -0
- data/app/views/invitations/_invitation_form.html.erb +1 -0
- data/app/views/layouts/_discussions.html.erb +5 -1
- data/app/views/layouts/_error.html.erb +3 -6
- data/app/views/layouts/_guide.html.erb +10 -3
- data/app/views/layouts/_kindergarten.html.erb +38 -0
- data/app/views/layouts/_main.html.erb +3 -1
- data/app/views/layouts/_organization_chooser.html.erb +0 -7
- data/app/views/layouts/_terms_acceptance_disclaimer.html.erb +6 -0
- data/app/views/layouts/application.html.erb +3 -2
- data/app/views/layouts/exercise_inputs/layouts/_input_kindergarten.html.erb +27 -27
- data/app/views/layouts/modals/_guide_corollary.html.erb +9 -0
- data/app/views/layouts/modals/_kindergarten_context.html.erb +30 -0
- data/app/views/layouts/modals/_kindergarten_results.html.erb +23 -0
- data/app/views/layouts/modals/_kindergarten_results_aborted.html.erb +24 -0
- data/app/views/users/_avatar_list.html.erb +6 -2
- data/app/views/users/_edit_user_form.html.erb +9 -4
- data/app/views/users/_term.html.erb +10 -0
- data/app/views/users/_user_form.html.erb +5 -1
- data/app/views/users/terms.html.erb +18 -0
- data/config/routes.rb +2 -0
- data/lib/mumuki/laboratory/controllers/current_organization.rb +1 -1
- data/lib/mumuki/laboratory/controllers/results_rendering.rb +3 -2
- data/lib/mumuki/laboratory/locales/en.yml +10 -5
- data/lib/mumuki/laboratory/locales/es-CL.yml +5 -4
- data/lib/mumuki/laboratory/locales/es.yml +12 -7
- data/lib/mumuki/laboratory/locales/pt.yml +12 -7
- data/lib/mumuki/laboratory/version.rb +1 -1
- data/spec/capybara_helper.rb +99 -0
- data/spec/controllers/exercise_solutions_controller_spec.rb +3 -4
- data/spec/dummy/db/schema.rb +37 -1
- data/spec/dummy/public/medal/outline.svg +1089 -0
- data/spec/features/choose_organization_spec.rb +12 -30
- data/spec/features/disable_user_flow_spec.rb +3 -5
- data/spec/features/disabled_organization_flow_spec.rb +9 -14
- data/spec/features/exercise_flow_spec.rb +2 -2
- data/spec/features/guide_reset_spec.rb +1 -1
- data/spec/features/guides_flow_spec.rb +1 -1
- data/spec/features/home_private_flow_spec.rb +1 -3
- data/spec/features/home_public_flow_spec.rb +6 -12
- data/spec/features/invitations_flow_spec.rb +2 -2
- data/spec/features/login_flow_spec.rb +2 -2
- data/spec/features/not_found_private_flow_spec.rb +4 -4
- data/spec/features/not_found_public_flow_spec.rb +1 -6
- data/spec/features/profile_flow_spec.rb +1 -1
- data/spec/helpers/page_title_helper_spec.rb +3 -3
- data/spec/javascripts/editors-spec.js +23 -0
- data/spec/javascripts/gamification-spec.js +58 -0
- data/spec/javascripts/submissions-store-spec.js +139 -6
- data/spec/spec_helper.rb +2 -0
- data/spec/teaspoon_env.rb +24 -6
- metadata +40 -7
@@ -103,6 +103,7 @@ es-CL:
|
|
103
103
|
first_name: Nombre
|
104
104
|
forbidden_explanation: ¿Puede que hayas ingresado con una cuenta incorrecta?
|
105
105
|
format: Dar formato
|
106
|
+
forum_terms_link: Si tienes alguna duda, consulta las %{terms_link}
|
106
107
|
fullscreen: "Pantalla completa"
|
107
108
|
gender: Género
|
108
109
|
get_messages: "Ver mensajes"
|
@@ -143,6 +144,7 @@ es-CL:
|
|
143
144
|
locked_content: 'Éste contenido se desbloqueará cuando termines los capítulos anteriores'
|
144
145
|
male: Hombre
|
145
146
|
manual_evaluation_pending: ¡Gracias por enviar tu solución! Tus docentes la corregirán pronto
|
147
|
+
medal: Medalla
|
146
148
|
message_count:
|
147
149
|
one: 1 mensaje
|
148
150
|
other: '%{count} mensajes'
|
@@ -153,8 +155,6 @@ es-CL:
|
|
153
155
|
minutes: minutos
|
154
156
|
more_messages: Ver mensajes anteriores
|
155
157
|
moderator: Moderador
|
156
|
-
mumuki_catchphrase: Aprende a programar
|
157
|
-
mumuki_short_description: Mumuki es la plataforma libre y gratuita para aprender a programar, de la práctica a la teoría y en tu idioma
|
158
158
|
my_doubts: Mis consultas
|
159
159
|
name: Nombre
|
160
160
|
navigation_continue: 'Siguiente %{kind}: %{sibling}'
|
@@ -201,7 +201,6 @@ es-CL:
|
|
201
201
|
permissions: Permisos
|
202
202
|
please_fill_profile_data: ¡Completa tus datos personales para continuar!
|
203
203
|
please_validate: 'Estás a punto de ingresar al curso. Para poder ofrecerte una mejor experiencia, por favor valida que tus datos a continuación sean reales y correctos.'
|
204
|
-
powered_by_mumuki_html: "por <span class=\"da da-mumuki-circle\"></span> mumuki"
|
205
204
|
previous_exercise: Anterior
|
206
205
|
problem_with_exercise: '[Mumuki] Error con el ejercicio: %{title}'
|
207
206
|
processing_your_solution: Estamos procesando tu solución
|
@@ -245,7 +244,6 @@ es-CL:
|
|
245
244
|
start_practicing: ¡Empieza ahora!
|
246
245
|
start_using_mumuki: ¡Empieza a usar Mumuki!
|
247
246
|
status: Estado
|
248
|
-
stay_here: No, quiero quedarme acá
|
249
247
|
stop_emails?: ¿Quieres dejar de recibir estos mails?
|
250
248
|
subscribe: Recibir notificaciones
|
251
249
|
submission: solución
|
@@ -260,6 +258,8 @@ es-CL:
|
|
260
258
|
tell_us_how: ¡Cuéntanos cómo te pasó esto!
|
261
259
|
tell_us_if_our_error: Si piensas que es un error nuestro, %{issues}
|
262
260
|
terms_and_conditions: Términos y condiciones
|
261
|
+
terms_and_conditions_continue_disclaimer: Al continuar aceptas los %{terms_link}
|
262
|
+
terms_and_conditions_must_be_accepted: Tienes que aceptar los términos y condiciones
|
263
263
|
test_results: Resultados de las pruebas
|
264
264
|
time_since: "hace %{time}"
|
265
265
|
time_left: Te quedan
|
@@ -271,6 +271,7 @@ es-CL:
|
|
271
271
|
unauthorized_explanation: ¡Ups! Esto es lo que se conoce como %{error}, es decir que no iniciaste sesión.
|
272
272
|
uncategorized: No categorizado
|
273
273
|
undo_upvote: No es útil
|
274
|
+
unlocked_medal_as_avatar: ¡Obtuviste esta medalla! Ya puedes elegirla como avatar.
|
274
275
|
unspecified: Prefiero no decirlo
|
275
276
|
unmeet_expectations: Objetivos que no se cumplieron
|
276
277
|
unprepared_organization_explanation: ¡Este recorrido aún no ha comenzado!
|
@@ -3,7 +3,9 @@ es:
|
|
3
3
|
aborted: Ups, no pudimos evaluar tu solución
|
4
4
|
abort_explanation_html: <li>Revisá que tu programa no tenga recursión o algún bucle infinito</li><li>Revisá que tengas conexión a internet</li><li>Esperá un rato e intentalo nuevamente</li>
|
5
5
|
about: Detalles
|
6
|
-
|
6
|
+
accept: Aceptar
|
7
|
+
accept_terms: He leido y acepto los términos y condiciones
|
8
|
+
accept_terms_to_continue: Para continuar es necesario aceptar los términos y condiciones
|
7
9
|
actions: Acciones
|
8
10
|
activity: Actividad
|
9
11
|
actual_state: Tablero obtenido
|
@@ -68,7 +70,7 @@ es:
|
|
68
70
|
destroy: Eliminar
|
69
71
|
details: Detalles
|
70
72
|
disabled_explanation: Estás intentando acceder a un recurso que fue deshabilitado o eliminado de forma permamente
|
71
|
-
disabled_organization_explanation:
|
73
|
+
disabled_organization_explanation: Este recorrido ha finalizado
|
72
74
|
discussion_description_placeholder: Podés agregar información para detallar más tu consulta
|
73
75
|
discussion_updated: Consulta actualizada
|
74
76
|
discussions: Consultas
|
@@ -109,6 +111,8 @@ es:
|
|
109
111
|
first_name: Nombre
|
110
112
|
forbidden_explanation: ¿Puede que hayas ingresado con una cuenta incorrecta?
|
111
113
|
format: Dar formato
|
114
|
+
forum_terms: Reglas del foro
|
115
|
+
forum_terms_link: Si tenés alguna duda, consultá las %{terms_link}
|
112
116
|
fullscreen: "Pantalla completa"
|
113
117
|
gender: Género
|
114
118
|
get_messages: "Ver mensajes"
|
@@ -150,6 +154,7 @@ es:
|
|
150
154
|
locked_content: 'Este contenido se desbloqueará cuando termines los capítulos anteriores'
|
151
155
|
male: Hombre
|
152
156
|
manual_evaluation_pending: ¡Gracias por enviar tu solución! Tus docentes la corregirán pronto
|
157
|
+
medal: Medalla
|
153
158
|
message_count:
|
154
159
|
one: 1 mensaje
|
155
160
|
other: '%{count} mensajes'
|
@@ -160,8 +165,6 @@ es:
|
|
160
165
|
minutes: minutos
|
161
166
|
more_messages: Ver mensajes anteriores
|
162
167
|
moderator: Mentor
|
163
|
-
mumuki_catchphrase: Aprendé a programar
|
164
|
-
mumuki_short_description: Mumuki es la plataforma libre y gratuita para aprender a programar, de la práctica a la teoría y en tu idioma
|
165
168
|
my_doubts: Mis consultas
|
166
169
|
name: Nombre
|
167
170
|
navigation_continue: 'Siguiente %{kind}: %{sibling}'
|
@@ -208,7 +211,6 @@ es:
|
|
208
211
|
permissions: Permisos
|
209
212
|
please_fill_profile_data: ¡Completá tus datos personales para continuar!
|
210
213
|
please_validate: 'Estás a punto de ingresar al curso. Para poder ofrecerte una mejor experiencia, por favor validá que tus datos a continuación sean reales y correctos.'
|
211
|
-
powered_by_mumuki_html: "por <span class=\"da da-mumuki-circle\"></span> mumuki"
|
212
214
|
previous_exercise: Anterior
|
213
215
|
problem_with_exercise: '[Mumuki] Error con el ejercicio: %{title}'
|
214
216
|
processing_your_solution: Estamos procesando tu solución
|
@@ -256,7 +258,6 @@ es:
|
|
256
258
|
start_practicing: ¡Empezá ahora!
|
257
259
|
start_using_mumuki: ¡Empezá a usar Mumuki!
|
258
260
|
status: Estado
|
259
|
-
stay_here: No, quiero quedarme acá
|
260
261
|
stop_emails?: ¿Querés dejar de recibir estos mails?
|
261
262
|
subscribe: Recibir notificaciones
|
262
263
|
submission: solución
|
@@ -270,7 +271,10 @@ es:
|
|
270
271
|
teacher_info: Información para docentes
|
271
272
|
tell_us_how: ¡Contanos cómo te pasó esto!
|
272
273
|
tell_us_if_our_error: Si pensás que es un error nuestro, %{issues}
|
274
|
+
terms_accepted: Los términos y condiciones fueron aceptados
|
273
275
|
terms_and_conditions: Términos y condiciones
|
276
|
+
terms_and_conditions_continue_disclaimer: Al continuar estás aceptando los %{terms_link}
|
277
|
+
terms_and_conditions_must_be_accepted: Tenés que aceptar los términos y condiciones
|
274
278
|
test_results: Resultados de las pruebas
|
275
279
|
time_since: "hace %{time}"
|
276
280
|
time_left: Te quedan
|
@@ -282,9 +286,10 @@ es:
|
|
282
286
|
unauthorized_explanation: ¡Ups! Esto es lo que se conoce como %{error}, es decir que no iniciaste sesión.
|
283
287
|
uncategorized: No categorizado
|
284
288
|
undo_upvote: No es útil
|
289
|
+
unlocked_medal_as_avatar: ¡Obtuviste esta medalla! Ya podés elegirla como avatar.
|
285
290
|
unspecified: Prefiero no decirlo
|
286
291
|
unmeet_expectations: Objetivos que no se cumplieron
|
287
|
-
unprepared_organization_explanation:
|
292
|
+
unprepared_organization_explanation: Este recorrido aún no ha comenzado
|
288
293
|
unsubscribe: Dejar de recibir notificaciones
|
289
294
|
unsubscribed_successfully: Te desuscribiste exitosamente de los recordatorios.
|
290
295
|
upload_solution: "Subir solución"
|
@@ -3,7 +3,9 @@ pt:
|
|
3
3
|
aborted: Opa, não pudemos avaliar sua solução
|
4
4
|
abort_explanation_html: <li>Verifique se o seu programa não possui recursão ou um loop infinito</li> <li>Verifique se você tem uma conexão com a internet</li> <li>Espere um pouco e tente novamente</li>
|
5
5
|
about: Detalhes
|
6
|
-
|
6
|
+
accept: Aceitar
|
7
|
+
accept_terms: Eu li e aceito ceito os termos e condições
|
8
|
+
accept_terms_to_continue: Aceite os termos e condições para continuar
|
7
9
|
actions: Ações
|
8
10
|
activity: Atividade
|
9
11
|
actual_state: Tablero obtido
|
@@ -65,7 +67,7 @@ pt:
|
|
65
67
|
destroy: Excluir
|
66
68
|
details: Detalhes
|
67
69
|
disabled_explanation: Você está tentando acessar um recurso que foi desativado ou removido permanentemente
|
68
|
-
disabled_organization_explanation: Este curso terminou
|
70
|
+
disabled_organization_explanation: Este curso terminou
|
69
71
|
discussion_description_placeholder: Você pode adicionar mais informações sobre sua dúvida
|
70
72
|
discussion_updated: Consulta actualizada
|
71
73
|
discussions: Consultas
|
@@ -105,6 +107,8 @@ pt:
|
|
105
107
|
first_name: Nome
|
106
108
|
forbidden_explanation: Você poderia ter entrado com uma conta incorreta?
|
107
109
|
format: Formato
|
110
|
+
forum_terms: Regras do fórum
|
111
|
+
forum_terms_link: Se você tiver alguma dúvida, consulte as %{terms_link}
|
108
112
|
fullscreen: Tela completa
|
109
113
|
gender: Gênero
|
110
114
|
get_messages: Ver mensagens
|
@@ -144,6 +148,7 @@ pt:
|
|
144
148
|
locked_content: 'Este conteúdo será desbloqueado quando você terminar os capítulos anteriores'
|
145
149
|
male: Masculino
|
146
150
|
manual_evaluation_pending: Obrigado por enviar sua solução! Seus professores irão corrigi-lo em breve
|
151
|
+
medal: Medalha
|
147
152
|
message_count:
|
148
153
|
one: 1 mensagem
|
149
154
|
other: '%{count} mensagens'
|
@@ -154,8 +159,6 @@ pt:
|
|
154
159
|
minutes: minutos
|
155
160
|
more_messages: Ver as mensagens anteriores
|
156
161
|
moderator: Mentor
|
157
|
-
mumuki_catchphrase: Aprendi a programar
|
158
|
-
mumuki_short_description: Mumuki é a plataforma gratuita e gratuita para aprender a programar, desde a prática até a teoria e no seu idioma
|
159
162
|
my_doubts: Minhas duvidas
|
160
163
|
name: Nome
|
161
164
|
navigation_continue: "Próximo %{kind}: %{sibling}"
|
@@ -199,7 +202,6 @@ pt:
|
|
199
202
|
permissions: Permissões
|
200
203
|
please_fill_profile_data: Preencha suas informações pessoais para continuar!
|
201
204
|
please_validate: Você está prestes a entrar no curso. Para oferecer uma experiência melhor, valide que seus dados abaixo sejam reais e corretos.
|
202
|
-
powered_by_mumuki_html: por <span class = "da da-mumuki-circle"> </ span> mumuki
|
203
205
|
previous_exercise: Anterior
|
204
206
|
problem_with_exercise: '[Mumuki] Erro com exercício %{title}'
|
205
207
|
processing_your_solution: Estamos processando sua solução
|
@@ -242,7 +244,6 @@ pt:
|
|
242
244
|
start_lesson: Comece esta lição!
|
243
245
|
start_practicing: Comece agora!
|
244
246
|
status: Estado
|
245
|
-
stay_here: Não, eu quero ficar aqui
|
246
247
|
submission: solução
|
247
248
|
submission_date: Data de envio
|
248
249
|
submission_for_exercise: Solução para exercício
|
@@ -255,7 +256,10 @@ pt:
|
|
255
256
|
teacher_info: Informação para professores
|
256
257
|
tell_us_how: Conte-nos como isso aconteceu com você!
|
257
258
|
tell_us_if_our_error: Se você acha que é nosso erro, %{issues}
|
259
|
+
terms_accepted: Os termos e condições foram aceitos
|
258
260
|
terms_and_conditions: Termos e Condições
|
261
|
+
terms_and_conditions_continue_disclaimer: Ao continuar, você concorda %{terms_link}
|
262
|
+
terms_and_conditions_must_be_accepted: Você deve aceitar os Termos e Condições
|
259
263
|
test_results: Resultados do teste
|
260
264
|
time_since: "há %{time}"
|
261
265
|
time_left: Te deixam
|
@@ -266,9 +270,10 @@ pt:
|
|
266
270
|
to_solved: Marcar como resolvida
|
267
271
|
unauthorized_explanation: Opa! Isso é o que é conhecido como %{error}, ou seja, você não fez logon.
|
268
272
|
uncategorized: Não classificado
|
273
|
+
unlocked_medal_as_avatar: Você ganhou essa medalha! Agora você pode escolhê-la como avatar.
|
269
274
|
unspecified: Eu preferiria não dizer
|
270
275
|
unmeet_expectations: Objetivos que não foram atendidos
|
271
|
-
unprepared_organization_explanation: Este curso ainda não começou
|
276
|
+
unprepared_organization_explanation: Este curso ainda não começou
|
272
277
|
unsubscribe: Cancelar subscrição
|
273
278
|
upload_solution: Carregar solução
|
274
279
|
uploading_solution: Uploading solution
|
data/spec/capybara_helper.rb
CHANGED
@@ -1,12 +1,111 @@
|
|
1
1
|
require 'capybara/rails'
|
2
2
|
require 'capybara/rspec'
|
3
3
|
|
4
|
+
# Test helpers
|
5
|
+
|
6
|
+
def page_body
|
7
|
+
find('body')
|
8
|
+
end
|
9
|
+
|
10
|
+
def set_request_header!(key, value)
|
11
|
+
current_driver = Capybara.current_session.driver
|
12
|
+
if current_driver.respond_to? :header
|
13
|
+
current_driver.header key, value
|
14
|
+
else
|
15
|
+
$custom_headers = {key => value}
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
4
19
|
def set_subdomain_host!(subdomain)
|
5
20
|
@request.try { |it| it.host = Mumukit::Platform.laboratory.organic_domain subdomain }
|
6
21
|
Capybara.app_host = Mumukit::Platform.laboratory.organic_url subdomain
|
7
22
|
end
|
8
23
|
|
9
24
|
def set_implicit_central!
|
25
|
+
warn "Implicit behaviour is going to be removed soon"
|
10
26
|
@request.try { |it| it.host = Mumukit::Platform.laboratory.domain }
|
11
27
|
Capybara.app_host = Mumukit::Platform.laboratory.url
|
12
28
|
end
|
29
|
+
|
30
|
+
# Config helpers
|
31
|
+
|
32
|
+
def selected_driver
|
33
|
+
case ENV['MUMUKI_SELENIUM_DRIVER']
|
34
|
+
when 'chrome'
|
35
|
+
:selenium_chrome_headless
|
36
|
+
when 'firefox'
|
37
|
+
:selenium_headless
|
38
|
+
when 'safari'
|
39
|
+
:selenium_safari
|
40
|
+
else
|
41
|
+
:rack_test
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def run_with_selenium?
|
46
|
+
selected_driver.to_s.start_with? 'selenium'
|
47
|
+
end
|
48
|
+
|
49
|
+
def register_safari_driver!
|
50
|
+
# No official docs for this, code was taken from https://github.com/teamcapybara/capybara/blob/master/spec/selenium_spec_safari.rb
|
51
|
+
Capybara.register_driver :selenium_safari do |app|
|
52
|
+
Capybara::Selenium::Driver.new(app, browser: :safari, timeout: 30)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
# Registers a middleware to set request headers, because Selenium Webdriver has no native support for that
|
57
|
+
def register_request_headers_workaround!
|
58
|
+
RSpec.configure do |config|
|
59
|
+
config.after(:suite) do
|
60
|
+
$custom_headers = nil
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
Object.class_eval <<-EOR
|
65
|
+
module RequestWithExtraHeaders
|
66
|
+
def headers
|
67
|
+
$custom_headers.each { |key, value| self.set_header "HTTP_\#{key}", value } if $custom_headers
|
68
|
+
super
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
class ActionDispatch::Request
|
73
|
+
prepend RequestWithExtraHeaders
|
74
|
+
end
|
75
|
+
EOR
|
76
|
+
end
|
77
|
+
|
78
|
+
def exclude_selenium_failing_tests!
|
79
|
+
RSpec.configure do |config|
|
80
|
+
config.filter_run_excluding(
|
81
|
+
# Response headers are not supported by Selenium Driver
|
82
|
+
:http_response_headers,
|
83
|
+
|
84
|
+
# TODO: the following ignored groups should be fixed
|
85
|
+
:element_not_interactable_error,
|
86
|
+
:invalid_selector_error,
|
87
|
+
:json_eq_error,
|
88
|
+
:navigation_error,
|
89
|
+
:organization_not_nil,
|
90
|
+
:xpath_no_matches
|
91
|
+
)
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
# Configuration
|
96
|
+
|
97
|
+
register_safari_driver! if selected_driver == :selenium_safari
|
98
|
+
Capybara.default_driver = selected_driver
|
99
|
+
|
100
|
+
# TODO: fix the tests that depend on hidden elements and remove this
|
101
|
+
Capybara.ignore_hidden_elements = false
|
102
|
+
|
103
|
+
if run_with_selenium?
|
104
|
+
register_request_headers_workaround!
|
105
|
+
exclude_selenium_failing_tests!
|
106
|
+
|
107
|
+
# Include port on the URL, so we don't need to forward it via nginx or so
|
108
|
+
Capybara.always_include_port = true
|
109
|
+
end
|
110
|
+
|
111
|
+
puts "Running Capybara tests with #{selected_driver}, #{Capybara.ignore_hidden_elements ? '' : 'not '}ignoring hidden elements"
|
@@ -62,8 +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]) }
|
66
|
-
|
65
|
+
except: [:html, :remaining_attempts_html, :current_exp]) }
|
67
66
|
|
68
67
|
it 'does not include kids specific renders' do
|
69
68
|
body = JSON.parse(response.body)
|
@@ -89,8 +88,8 @@ describe ExerciseSolutionsController, organization_workspace: :test do
|
|
89
88
|
before { post_problem(kids_problem) }
|
90
89
|
|
91
90
|
it { expect(response.body).to json_eq({ status: :failed, guide_finished_by_solution: false },
|
92
|
-
except: [:html, :remaining_attempts_html,
|
93
|
-
:
|
91
|
+
except: [:html, :remaining_attempts_html, :title_html, :button_html,
|
92
|
+
:expectations, :test_results, :tips, :current_exp]) }
|
94
93
|
|
95
94
|
it 'includes kids specific renders' do
|
96
95
|
body = JSON.parse(response.body)
|
data/spec/dummy/db/schema.rb
CHANGED
@@ -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:
|
13
|
+
ActiveRecord::Schema.define(version: 20201027152806) do
|
14
14
|
|
15
15
|
# These are extensions that must be enabled in order to support this database
|
16
16
|
enable_extension "plpgsql"
|
@@ -45,6 +45,7 @@ ActiveRecord::Schema.define(version: 20200804191643) do
|
|
45
45
|
t.datetime "submitted_at"
|
46
46
|
t.bigint "parent_id"
|
47
47
|
t.integer "top_submission_status"
|
48
|
+
t.boolean "misplaced"
|
48
49
|
t.index ["exercise_id"], name: "index_assignments_on_exercise_id"
|
49
50
|
t.index ["organization_id"], name: "index_assignments_on_organization_id"
|
50
51
|
t.index ["parent_id"], name: "index_assignments_on_parent_id"
|
@@ -66,6 +67,7 @@ ActiveRecord::Schema.define(version: 20200804191643) do
|
|
66
67
|
t.text "description"
|
67
68
|
t.string "slug"
|
68
69
|
t.boolean "private", default: false
|
70
|
+
t.bigint "medal_id"
|
69
71
|
t.index ["slug"], name: "index_books_on_slug", unique: true
|
70
72
|
end
|
71
73
|
|
@@ -124,9 +126,12 @@ ActiveRecord::Schema.define(version: 20200804191643) do
|
|
124
126
|
t.boolean "requires_moderator_response", default: true
|
125
127
|
t.string "last_moderator_access_by_id"
|
126
128
|
t.datetime "last_moderator_access_at"
|
129
|
+
t.bigint "status_updated_by_id"
|
130
|
+
t.datetime "status_updated_at"
|
127
131
|
t.index ["initiator_id"], name: "index_discussions_on_initiator_id"
|
128
132
|
t.index ["item_type", "item_id"], name: "index_discussions_on_item_type_and_item_id"
|
129
133
|
t.index ["organization_id"], name: "index_discussions_on_organization_id"
|
134
|
+
t.index ["status_updated_by_id"], name: "index_discussions_on_status_updated_by_id"
|
130
135
|
end
|
131
136
|
|
132
137
|
create_table "exam_authorizations", force: :cascade do |t|
|
@@ -218,6 +223,7 @@ ActiveRecord::Schema.define(version: 20200804191643) do
|
|
218
223
|
t.text "learn_more"
|
219
224
|
t.text "settings"
|
220
225
|
t.text "custom_expectations"
|
226
|
+
t.bigint "medal_id"
|
221
227
|
t.index ["name"], name: "index_guides_on_name"
|
222
228
|
t.index ["slug"], name: "index_guides_on_slug", unique: true
|
223
229
|
end
|
@@ -234,6 +240,7 @@ ActiveRecord::Schema.define(version: 20200804191643) do
|
|
234
240
|
t.boolean "dirty_by_submission", default: false
|
235
241
|
t.integer "children_passed_count"
|
236
242
|
t.integer "children_count"
|
243
|
+
t.boolean "once_completed"
|
237
244
|
t.index ["content_type", "content_id"], name: "index_indicators_on_content_type_and_content_id"
|
238
245
|
t.index ["organization_id"], name: "index_indicators_on_organization_id"
|
239
246
|
t.index ["parent_id"], name: "index_indicators_on_parent_id"
|
@@ -289,6 +296,11 @@ ActiveRecord::Schema.define(version: 20200804191643) do
|
|
289
296
|
t.integer "topic_id"
|
290
297
|
end
|
291
298
|
|
299
|
+
create_table "medals", force: :cascade do |t|
|
300
|
+
t.string "image_url"
|
301
|
+
t.string "description"
|
302
|
+
end
|
303
|
+
|
292
304
|
create_table "messages", id: :serial, force: :cascade do |t|
|
293
305
|
t.string "submission_id"
|
294
306
|
t.text "content"
|
@@ -313,6 +325,10 @@ ActiveRecord::Schema.define(version: 20200804191643) do
|
|
313
325
|
t.integer "progressive_display_lookahead"
|
314
326
|
t.integer "target_audience", default: 0
|
315
327
|
t.boolean "incognito_mode_enabled"
|
328
|
+
t.text "display_name"
|
329
|
+
t.text "display_description"
|
330
|
+
t.boolean "wins_page"
|
331
|
+
t.boolean "immersible"
|
316
332
|
t.index ["book_id"], name: "index_organizations_on_book_id"
|
317
333
|
t.index ["name"], name: "index_organizations_on_name", unique: true
|
318
334
|
end
|
@@ -334,6 +350,15 @@ ActiveRecord::Schema.define(version: 20200804191643) do
|
|
334
350
|
t.index ["user_id"], name: "index_subscriptions_on_user_id"
|
335
351
|
end
|
336
352
|
|
353
|
+
create_table "terms", force: :cascade do |t|
|
354
|
+
t.string "locale"
|
355
|
+
t.string "scope"
|
356
|
+
t.text "content"
|
357
|
+
t.text "header"
|
358
|
+
t.datetime "created_at", null: false
|
359
|
+
t.datetime "updated_at", null: false
|
360
|
+
end
|
361
|
+
|
337
362
|
create_table "topics", id: :serial, force: :cascade do |t|
|
338
363
|
t.string "name"
|
339
364
|
t.string "locale"
|
@@ -343,6 +368,7 @@ ActiveRecord::Schema.define(version: 20200804191643) do
|
|
343
368
|
t.text "appendix"
|
344
369
|
t.string "slug"
|
345
370
|
t.boolean "private", default: false
|
371
|
+
t.bigint "medal_id"
|
346
372
|
t.index ["slug"], name: "index_topics_on_slug", unique: true
|
347
373
|
end
|
348
374
|
|
@@ -398,6 +424,16 @@ ActiveRecord::Schema.define(version: 20200804191643) do
|
|
398
424
|
t.bigint "avatar_id"
|
399
425
|
t.datetime "disabled_at"
|
400
426
|
t.boolean "trusted_for_forum"
|
427
|
+
t.string "avatar_type", default: "Avatar"
|
428
|
+
t.datetime "headmaster_terms_accepted_at"
|
429
|
+
t.datetime "janitor_terms_accepted_at"
|
430
|
+
t.datetime "moderator_terms_accepted_at"
|
431
|
+
t.datetime "student_terms_accepted_at"
|
432
|
+
t.datetime "teacher_terms_accepted_at"
|
433
|
+
t.datetime "privacy_terms_accepted_at"
|
434
|
+
t.datetime "legal_terms_accepted_at"
|
435
|
+
t.datetime "forum_terms_accepted_at"
|
436
|
+
t.index ["avatar_type", "avatar_id"], name: "index_users_on_avatar_type_and_avatar_id"
|
401
437
|
t.index ["disabled_at"], name: "index_users_on_disabled_at"
|
402
438
|
t.index ["last_organization_id"], name: "index_users_on_last_organization_id"
|
403
439
|
t.index ["uid"], name: "index_users_on_uid", unique: true
|