mumuki-laboratory 9.18.0 → 9.20.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: '0617268be6df9b74ff993247e4876c84492970ce49b6967db2aabb9ede077b5b'
4
- data.tar.gz: 7c8387588bafd36583f3304f081401d91824fe8db75f023edefd4518d3c4e3f9
3
+ metadata.gz: 11031aa81120210f592a1d2d752213aa71f526e4d74f1b4eadfc14602db2543f
4
+ data.tar.gz: d384d4bc85bab893488bbbc2c41a964accc9fa8070bebecc06328617175466dd
5
5
  SHA512:
6
- metadata.gz: 9aa1867aaa19195882d1eab24537353237354417dff78f134fce70790475d005b7e42fc7212a5420e41a6aa2d051ab6e107e8ea824363782406ffc98a435dc28
7
- data.tar.gz: 05127705df408c4f031c4dd9c9b03a8685034fcc68b97ddd27d70aaaa87a85598c5dafebb7000fede11b3c8f09b9324b711a07d4362ca8518538d2912d118e6c
6
+ metadata.gz: aadaa5c19b73a86d980aca9e7b2eb7ee9f839d3a595ead5443f8cdc2d994ebd486bcebe994e2f73cbddea9f9be7ce5f0d45a566f1d2e63c497d805f9c124c63d
7
+ data.tar.gz: a35d874f27b0ac4dbe30b4f4162214d54023418d0410facc140329cd605790800b90997426412a1efba3fd0de856bccc232451054c256ad0840c69f645fa8963
@@ -1,9 +1,6 @@
1
1
  mumuki.startTimer = (() => {
2
- function startTimer(endDate) {
3
- var endTime = new Date(endDate).getTime();
4
- var currentTime = Date.now();
5
- var diffTime = endTime - currentTime;
6
- var duration = moment.duration(diffTime, 'milliseconds');
2
+ function startTimer(seconds) {
3
+ var duration = moment.duration(seconds, 'seconds');
7
4
  var intervalDuration = 1000;
8
5
 
9
6
  var interval = mumuki.setInterval(function () {
@@ -34,14 +34,6 @@
34
34
  background-image: none;
35
35
  }
36
36
 
37
- .alert {
38
- margin: 10px 50px 10px 15px;
39
- }
40
-
41
- .alert-danger a {
42
- color: greenyellow;
43
- }
44
-
45
37
  .exercise-search-box {
46
38
  width: 263px;
47
39
  position: fixed
@@ -7,6 +7,7 @@
7
7
 
8
8
  .mu-profile-actions {
9
9
  margin-left: auto;
10
+ text-align: center;
10
11
 
11
12
  .btn {
12
13
  width: 150px;
@@ -18,15 +19,6 @@
18
19
  border-color: lighten($mu-color-complementary, 15%);
19
20
  }
20
21
  }
21
-
22
- &.mobile {
23
- text-align: center;
24
- margin: 20px 5px -20px -10px;
25
-
26
- .btn {
27
- width: calc(50% - 20px);
28
- }
29
- }
30
22
  }
31
23
 
32
24
  .mu-profile-info {
@@ -13,5 +13,4 @@ $da-font-path: asset-path('assets');
13
13
  @import "application/invitations";
14
14
  @import "application/modules";
15
15
  @import "application/errors";
16
- @import "application/alerts";
17
16
  @import "application/codemirror-themes";
@@ -68,7 +68,7 @@ class ApplicationController < ActionController::Base
68
68
  # ensures contents are accessible to current user
69
69
  def validate_accessible!
70
70
  return if current_user&.teacher_here?
71
- accessible_subject.validate_accessible_for! current_user
71
+ accessible_subject&.validate_accessible_for! current_user
72
72
  end
73
73
 
74
74
  def validate_active_organization!
@@ -129,7 +129,6 @@ class ApplicationController < ActionController::Base
129
129
  def validate_user_profile!
130
130
  unless current_user.profile_completed?
131
131
  save_location_before! :profile_completion
132
- flash[:info] = I18n.t :please_fill_profile_data
133
132
  redirect_to edit_user_path
134
133
  end
135
134
  end
@@ -7,18 +7,22 @@ class ExamAuthorizationRequestsController < ApplicationController
7
7
  def create
8
8
  authorization_request = @registration.request_authorization! current_user, @exam
9
9
  current_user.read_notification! @registration
10
- flash.notice = I18n.t :exam_authorization_request_created
11
- redirect_to root_path
10
+ flash.notice = friendly_flash_notice(:exam_authorization_request_created)
11
+ redirect_to exam_authorizations_user_path
12
12
  end
13
13
 
14
14
  def update
15
15
  @registration.update_authorization_request_by_id! params[:id], @exam
16
- flash.notice = I18n.t :exam_authorization_request_saved
17
- redirect_to root_path
16
+ flash.notice = friendly_flash_notice(:exam_authorization_request_saved)
17
+ redirect_to exam_authorizations_user_path
18
18
  end
19
19
 
20
20
  private
21
21
 
22
+ def friendly_flash_notice(key)
23
+ I18n.t key, friendly_date: helpers.local_time(@exam.start_time)
24
+ end
25
+
22
26
  def authorization_request_params
23
27
  params.require(:exam_authorization_request).permit(:exam_id, :exam_registration_id)
24
28
  end
@@ -6,7 +6,6 @@ class ExercisesController < ApplicationController
6
6
 
7
7
  before_action :set_guide!, only: :show
8
8
  before_action :set_assignment!, only: :show, if: :current_user?
9
- before_action :validate_accessible!, only: :show
10
9
  before_action :start!, only: :show
11
10
 
12
11
  def show
@@ -4,7 +4,7 @@ module ProfileHelper
4
4
  end
5
5
 
6
6
  def cancel_edit_profile_button
7
- link_to t(:cancel), :user, class: 'btn btn-secondary' if current_user.profile_completed?
7
+ link_to t(:cancel), :user, class: 'btn btn-outline-complementary' if current_user.profile_completed?
8
8
  end
9
9
 
10
10
  def save_edit_profile_button(form)
@@ -9,7 +9,7 @@
9
9
  <% @stats = @exercise.stats_for(current_user) %>
10
10
 
11
11
  <% if @exercise.navigable_parent.timed? && !current_user.teacher? %>
12
- <%= render partial: 'layouts/timer', locals: {end_time: @exercise.navigable_parent.real_end_time(current_user)} %>
12
+ <%= render partial: 'layouts/timer', locals: { duration: @exercise.navigable_parent.time_left(current_user) } %>
13
13
  <% end %>
14
14
 
15
15
  <% unless @exercise.input_kids? %>
@@ -3,7 +3,7 @@
3
3
  <%= render partial: 'layouts/authoring', locals: {guide: @guide} %>
4
4
 
5
5
  <% if subject.timed? && @stats.started? && !current_user.teacher? %>
6
- <%= render partial: 'layouts/timer', locals: {end_time: subject.real_end_time(current_user)} %>
6
+ <%= render partial: 'layouts/timer', locals: { duration: subject.time_left(current_user) } %>
7
7
  <% end %>
8
8
 
9
9
  <%= yield if block_given? %>
@@ -4,7 +4,7 @@
4
4
  <i class="timer timer-text text-center"><%= t :time_left %></i>
5
5
  <i id="timer" class="timer timer-text text-center"></i>
6
6
  <script>
7
- mumuki.startTimer('<%= end_time&.iso8601 %>');
7
+ mumuki.startTimer(<%= duration %>);
8
8
  </script>
9
9
  </div>
10
10
  </div>
@@ -1,19 +1,23 @@
1
- <fieldset>
2
- <div><%= form.label(t :first_name) %></div>
3
- <div><%= form.text_field :first_name, required: true, class: 'form-control' %></div>
4
- </fieldset>
5
- <fieldset>
6
- <div><%= form.label(t :last_name) %></div>
7
- <div><%= form.text_field :last_name, required: true, class: 'form-control' %></div>
8
- </fieldset>
9
- <fieldset>
10
- <div><%= form.label(t :gender) %></div>
11
- <div><%= form.select :gender, options_for_select(User.genders.map { |gender, _| [t(gender), gender] }, @user.gender), {}, required: true, class: 'form-control form-select' %></div>
12
- </fieldset>
13
- <fieldset>
14
- <div><%= form.label(t :birthdate) %></div>
15
- <div><%= form.date_field :birthdate, min: Date.new(1900), max: 3.years.ago.end_of_year, required: true, class: 'form-control' %></div>
16
- </fieldset>
1
+ <div class="row">
2
+ <fieldset class="col-lg-6">
3
+ <div><%= form.label(t :first_name) %></div>
4
+ <div><%= form.text_field :first_name, required: true, class: 'form-control' %></div>
5
+ </fieldset>
6
+ <fieldset class="col-lg-6">
7
+ <div><%= form.label(t :last_name) %></div>
8
+ <div><%= form.text_field :last_name, required: true, class: 'form-control' %></div>
9
+ </fieldset>
10
+ </div>
11
+ <div class="row">
12
+ <fieldset class="col-lg-4">
13
+ <div><%= form.label(t :birthdate) %></div>
14
+ <div><%= form.date_field :birthdate, min: Date.new(1900), max: 3.years.ago.end_of_year, required: true, class: 'form-control' %></div>
15
+ </fieldset>
16
+ <fieldset class="col-lg-4 offset-lg-2">
17
+ <div><%= form.label(t :gender) %></div>
18
+ <div><%= form.select :gender, options_for_select(User.genders.map { |gender, _| [t(gender), gender] }, @user.gender), {}, required: true, class: 'form-control form-select' %></div>
19
+ </fieldset>
20
+ </div>
17
21
  <fieldset>
18
22
  <div><%= form.label(t :email) %></div>
19
23
  <div><%= form.text_field :email, readonly: true, class: 'form-control' %></div>
@@ -1,22 +1,24 @@
1
1
  <%= form_for :user, url: user_path, :html => { id: 'mu-user-form', class: 'mu-form' }, method: :put do |f| %>
2
2
  <div class="mu-user-header">
3
3
  <h1><%= t(:edit_profile) %></h1>
4
- <div class="mu-profile-actions d-none d-md-block">
5
- <%= cancel_edit_profile_button %>
6
- <%= save_edit_profile_button f %>
7
- </div>
8
4
  </div>
9
5
  <div class="row mu-tab-body">
10
- <div class="col-md-6 col-lg-4 mu-user-avatar-container">
6
+ <div class="col-md-6 col-lg-4 mu-user-avatar-container mb-3">
11
7
  <%= profile_picture_for(@user, id: 'mu-user-avatar', class: 'mu-user-avatar') %>
12
8
  <button class="fas fa-pencil-alt fa-2x btn mu-edit-avatar" type="button" data-bs-toggle="modal" data-bs-target="#mu-avatar-picker" tabindex="0"></button>
13
9
  </div>
14
- <div class="col-md-6 col-lg-8">
10
+ <div class="col-md-6 col-lg-8 mb-4">
11
+ <% unless current_user.profile_completed? %>
12
+ <div class="alert alert-info alert-dismissible fade show" role="alert">
13
+ <%= fa_icon 'info-circle', class: 'fa-lg me-2 align-middle', text: t(:please_fill_profile_data) %>
14
+ <button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
15
+ </div>
16
+ <% end %>
15
17
  <%= render partial: 'profile_fields', locals: {form: f} %>
16
18
  <%= render partial: 'layouts/terms_acceptance_disclaimer', locals: {user: @user} %>
17
19
  </div>
18
20
  </div>
19
- <div class="mu-profile-actions mobile d-block d-md-none">
21
+ <div class="mu-profile-actions">
20
22
  <%= cancel_edit_profile_button %>
21
23
  <%= save_edit_profile_button f %>
22
24
  </div>
@@ -7,9 +7,14 @@ module Mumuki::Laboratory::Controllers::ValidateAccessMode
7
7
 
8
8
  def validate_accessible!
9
9
  current_access_mode.validate_content_here! subject_container
10
+ super
10
11
  end
11
12
 
12
13
  def subject_container
13
14
  subject
14
15
  end
16
+
17
+ def accessible_subject
18
+ nil
19
+ end
15
20
  end
@@ -121,9 +121,9 @@ en:
121
121
  errored: Oops, your solution didn't work
122
122
  exam_authorization_pending_explanation_html: You have until <strong>%{end_time}</strong> (%{location} time) to register. After that date, your request will be processed and you will receive a confirmation. <br> Don't forget to check the notifications!
123
123
  exam_authorization_request_approved_html: Your request was approved, don't forget to log in at <strong>%{date}</strong> (%{location} time). Good luck!
124
- exam_authorization_request_created: Your registration to the exam has been saved!
124
+ exam_authorization_request_created: You registered for the exam on %{friendly_date}
125
125
  exam_authorization_request_rejected: Your request was rejected because you didn't meet the requirements.
126
- exam_authorization_request_saved: Your registration to the exam has been updated!
126
+ exam_authorization_request_saved: You've changed your registration to the exam to %{friendly_date}
127
127
  exam_authorization_request_updated: Your registration to %{description} has been updated
128
128
  exam_registration_choose_exam: Choose date and time to attend to the exam
129
129
  exam_registration_explanation_html: You have until <strong>%{date}</strong> (%{location} time) to register. After that date, your request will be processed and you will receive a confirmation. <br> Don't forget to check the notifications!
@@ -124,9 +124,9 @@ es-CL:
124
124
  exam_authorization_pending_change_date_html: Tienes tiempo hasta el <strong>%{end_time}</strong> (hora de %{location}) para cambiar el turno haciendo click <strong><a href="%{edit_path}">aquí</a></strong>. Pasada esa fecha, tu solicitud será evaluada y recibirás una confirmación. <br> ¡No olvides revisar las notificaciones!
125
125
  exam_authorization_pending_done_html: Ya te inscribiste a este examen. Luego del <strong>%{end_time}</strong> (hora de %{location}) se evaluará tu solicitud y recibirás una confirmación. <br> ¡No olvides de revisar las notificaciones!
126
126
  exam_authorization_request_approved_html: Tu solicitud fue aprobada, no olvides conectarte el <strong>%{date}</strong> (hora de %{location}). ¡Buena suerte!
127
- exam_authorization_request_created: ¡Tu inscripción al examen se registró exitosamente!
127
+ exam_authorization_request_created: Te has inscripto al examen del día %{friendly_date}
128
128
  exam_authorization_request_rejected: Tu solicitud fue rechazada porque no cumpliste con los requisitos para rendir el examen.
129
- exam_authorization_request_saved: ¡Tu inscripción al examen se modificó exitosamente!
129
+ exam_authorization_request_saved: Has cambiado tu inscripción al examen al día %{friendly_date}
130
130
  exam_authorization_request_updated: Hay novedades sobre tu inscripción a %{description}
131
131
  exam_registration_choose_exam: Seleccioná día y horario en el que te gustaría rendir el examen
132
132
  exam_registration_explanation_html: Tienes tiempo hasta el <strong>%{date}</strong> (hora de %{location}) para inscribirte. Pasada esa fecha, tu solicitud será evaluada y recibirás una confirmación. <br> ¡No olvides revisar las notificaciones!
@@ -131,9 +131,9 @@ es:
131
131
  exam_authorization_pending_change_date_html: Tenés tiempo hasta el <strong>%{end_time}</strong> (hora de %{location}) para cambiar el turno haciendo click <strong><a href="%{edit_path}">acá</a></strong>. Pasada esa fecha, tu solicitud será evaluada y recibirás una confirmación. <br> ¡No te olvides de revisar las notificaciones!
132
132
  exam_authorization_pending_done_html: Ya te inscribiste a este examen. Luego del <strong>%{end_time}</strong> (hora de %{location}) se evaluará tu solicitud y recibirás una confirmación. <br> ¡No te olvides de revisar las notificaciones!
133
133
  exam_authorization_request_approved_html: Tu solicitud fue aprobada, no olvides conectarte el <strong>%{date}</strong> (hora de %{location}). ¡Buena suerte!
134
- exam_authorization_request_created: ¡Tu inscripción al examen se registró exitosamente!
134
+ exam_authorization_request_created: Te inscribiste al examen del día %{friendly_date}
135
135
  exam_authorization_request_rejected: Tu solicitud fue rechazada porque no cumpliste con los requisitos para rendir el examen.
136
- exam_authorization_request_saved: ¡Tu inscripción al examen se modificó exitosamente!
136
+ exam_authorization_request_saved: Cambiaste tu inscripción al examen al día %{friendly_date}
137
137
  exam_authorization_request_updated: Hay novedades sobre tu inscripción a %{description}
138
138
  exam_registration_choose_exam: Seleccioná día y horario en el que te gustaría rendir el examen
139
139
  exam_registration_explanation_html: Tenés tiempo hasta el <strong>%{date}</strong> (hora de %{location}) para inscribirte. Pasada esa fecha, tu solicitud será evaluada y recibirás una confirmación. <br> ¡No te olvides de revisar las notificaciones!
@@ -124,9 +124,9 @@ pt:
124
124
  errored: Opa! Sua solução não pode ser executada
125
125
  exam_authorization_pending_explanation_html: Você tem tempo até <strong>%{date}</strong> (horário de %{location}) 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!
126
126
  exam_authorization_request_approved_html: Sua solicitação foi aprovada, não se esqueça de conectar em <strong>%{date}</strong> (horário de %{location}). Boa sorte!
127
- exam_authorization_request_created: Seu registro de exame foi salvo com sucesso!
127
+ exam_authorization_request_created: Você se inscreveu para o exame do dia %{friendly_date}
128
128
  exam_authorization_request_rejected: Sua solicitação foi rejeitada porque você não atendeu aos requisitos.
129
- exam_authorization_request_saved: Seu registro de exame foi modificado com sucesso!
129
+ exam_authorization_request_saved: Você alterou seu registro de exame para o dia %{friendly_date}
130
130
  exam_authorization_request_updated: Há notícias sobre seu registro para %{description}
131
131
  exam_registration_choose_exam: Selecione o dia e a hora em que gostaria de fazer o exame
132
132
  exam_registration_explanation_html: Você tem tempo até <strong>%{date}</strong> (horário de %{location}) 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!
@@ -1,5 +1,5 @@
1
1
  module Mumuki
2
2
  module Laboratory
3
- VERSION = '9.18.0'
3
+ VERSION = '9.20.1'
4
4
  end
5
5
  end
@@ -0,0 +1,32 @@
1
+ require 'spec_helper'
2
+
3
+ describe ExercisesController, organization_workspace: :test do
4
+ let(:user) { create(:user) }
5
+
6
+ let(:problem) { create(:problem) }
7
+ let!(:exam) { create :exam, exercises: [problem], duration: 10, start_time: 1.hour.ago, end_time: 1.hour.since }
8
+
9
+ before { reindex_current_organization! }
10
+ before { set_current_user! user }
11
+
12
+
13
+ describe 'show' do
14
+ context 'when user is in the middle of an exam' do
15
+
16
+ let!(:exam_authorization) { create :exam_authorization, exam: exam, user: user, started: true, started_at: started_at }
17
+ before { get :show, params: { id: problem.id } }
18
+
19
+ context 'when user is not out of time yet' do
20
+ let(:started_at) { 5.minutes.ago }
21
+
22
+ it { expect(response.status).to eq 200 }
23
+ end
24
+
25
+ context 'when user is out of time' do
26
+ let(:started_at) { 20.minutes.ago }
27
+
28
+ it { expect(response.status).to eq 410 }
29
+ end
30
+ end
31
+ end
32
+ end
@@ -9,22 +9,30 @@ Organization.find_or_create_by!(name: 'base') do |org|
9
9
  org.public = true
10
10
  org.login_methods = Mumukit::Login::Settings.login_methods
11
11
  org.locale = 'es'
12
+ org.time_zone = 'Buenos Aires'
12
13
  end
13
14
 
14
15
  Organization.find_or_create_by!(name: 'private') do |org|
15
- org.book = Book.find_by!(slug: 'mumukiproject/mumuki-libro-aprende-a-programar-recorrido-extendido')
16
+ org.book = Book.find_by!(slug: 'mumuki/mumuki-libro-programacion')
16
17
  org.public = false
18
+ org.time_zone = 'Buenos Aires'
17
19
  end
18
20
 
19
- Organization.find_or_create_by!(name: 'primaria') do |org|
20
- org.book = Book.find_by!(slug: 'mumukiproject/mumuki-libro-primaria')
21
- org.login_methods = Mumukit::Login::Settings.login_methods
22
- org.public = true
23
- end
21
+ Organization.find_or_create_by!(name: 'primaria') do |org|
22
+ org.book = Book.find_by!(slug: 'mumukiproject/mumuki-libro-primaria')
23
+ org.login_methods = Mumukit::Login::Settings.login_methods
24
+ org.public = true
25
+ org.time_zone = 'Buenos Aires'
26
+ end
24
27
 
25
- Organization.find_or_create_by!(name: 'central')
28
+ Organization.find_or_create_by!(name: 'central') do |org|
29
+ org.book = Book.find_by!(slug: 'mumuki/mumuki-libro-programacion')
30
+ org.login_methods = Mumukit::Login::Settings.login_methods
31
+ org.public = true
32
+ org.time_zone = 'Buenos Aires'
33
+ end
26
34
 
27
- User.find_or_create_by!(uid: 'dev.student@mumuki.org') { |org| org.permissions = {student: 'central/*'} }
35
+ User.find_or_create_by!(uid: 'dev.student@mumuki.org') { |org| org.permissions = {student: 'private/*'} }
28
36
  User.find_or_create_by!(uid: 'dev.teacher@mumuki.org') { |org| org.permissions = {teacher: 'private/*'} }
29
37
  User.find_or_create_by!(uid: 'dev.admin@mumuki.org') { |org| org.permissions = {admin: '*/*'} }
30
38
  User.find_or_create_by!(uid: 'dev.owner@mumuki.org') { |org| org.permissions = {owner: '*/*'} }
@@ -470,20 +470,22 @@ feature 'Read Only Flow' do
470
470
 
471
471
  context 'and user is ex student of organization' do
472
472
  before { user.update! permissions: { ex_student: slug } }
473
- scenario 'avatar dorpdown' do
473
+ scenario 'avatar dropdown' do
474
474
  visit "/"
475
475
  find('#profileDropdown').click
476
- expect(page).not_to have_text('My account')
477
- expect(page).not_to have_text('FAQs')
478
- expect(page).not_to have_text('Classroom')
479
- expect(page).not_to have_text('Solve other\'s doubts')
476
+ expect(page).to have_text('My account')
477
+ expect(page).to have_text('FAQs')
480
478
  expect(page).not_to have_text('My doubts')
479
+ expect(page).not_to have_text('Classroom')
481
480
  expect(page).not_to have_text('Bibliotheca')
481
+ expect(page).not_to have_text('Solve other\'s doubts')
482
482
  expect(page).to have_text('Sign Out')
483
483
  end
484
484
  scenario 'show book' do
485
485
  visit "/"
486
- expect(page).to have_text('You are not allowed to see this content')
486
+ expect(page).not_to have_text('Chapter 1')
487
+ expect(page).not_to have_text('Chapter 2')
488
+ expect(page).not_to have_text('Practicing!')
487
489
  end
488
490
  scenario 'show chapter' do
489
491
  visit "/chapters/#{chapter1.id}"
@@ -503,27 +505,23 @@ feature 'Read Only Flow' do
503
505
  end
504
506
  scenario 'show profile' do
505
507
  visit "/user"
506
- expect(page).to have_text('You are not allowed to see this content')
508
+ expect(page).to have_text('My profile')
507
509
  end
508
510
  scenario 'show faqs' do
509
511
  visit "/faqs"
510
- expect(page).to have_text('You are not allowed to see this content')
511
- end
512
- scenario 'show discussion' do
513
- visit "/discussions"
514
- expect(page).to have_text('You are not allowed to see this content')
512
+ expect(page).to have_text('FAQs')
515
513
  end
516
514
  scenario 'show discussion in existent exercise' do
517
515
  visit "/exercises/#{exercise111.id}/discussions/#{discussion111.id}"
518
- expect(page).to have_text('You are not allowed to see this content')
516
+ expect(page).to have_text('Page was not found')
519
517
  end
520
518
  scenario 'show discussion in existent exercise' do
521
519
  visit "/exercises/#{exercise112.id}/discussions/#{discussion112.id}"
522
- expect(page).to have_text('You are not allowed to see this content')
520
+ expect(page).to have_text('Page was not found')
523
521
  end
524
522
  scenario 'new discussion' do
525
523
  visit "/exercises/#{exercise112.id}/discussions/new"
526
- expect(page).to have_text('You are not allowed to see this content')
524
+ expect(page).to have_text('Page was not found')
527
525
  end
528
526
  end
529
527
 
@@ -740,7 +738,7 @@ feature 'Read Only Flow' do
740
738
 
741
739
  context 'and user is ex student of organization' do
742
740
  before { user.update! permissions: { ex_student: slug } }
743
- scenario 'avatar dorpdown' do
741
+ scenario 'avatar dorpdownz' do
744
742
  visit "/"
745
743
  find('#profileDropdown').click
746
744
  expect(page).to have_text('My account')
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mumuki-laboratory
3
3
  version: !ruby/object:Gem::Version
4
- version: 9.18.0
4
+ version: 9.20.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Franco Bulgarelli
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-09-30 00:00:00.000000000 Z
11
+ date: 2021-10-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 9.18.0
33
+ version: 9.20.0
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: 9.18.0
40
+ version: 9.20.0
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: mumukit-bridge
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -438,7 +438,6 @@ files:
438
438
  - app/assets/javascripts/mumuki_laboratory/application/upload.js
439
439
  - app/assets/javascripts/mumuki_laboratory/application/user.js
440
440
  - app/assets/stylesheets/mumuki_laboratory/application.scss
441
- - app/assets/stylesheets/mumuki_laboratory/application/_alerts.scss
442
441
  - app/assets/stylesheets/mumuki_laboratory/application/_codemirror-themes.scss
443
442
  - app/assets/stylesheets/mumuki_laboratory/application/_errors.scss
444
443
  - app/assets/stylesheets/mumuki_laboratory/application/_fonts.scss
@@ -800,6 +799,7 @@ files:
800
799
  - spec/controllers/exam_authorization_requests_controller_spec.rb
801
800
  - spec/controllers/exam_registrations_controller_spec.rb
802
801
  - spec/controllers/exercise_solutions_controller_spec.rb
802
+ - spec/controllers/exercises_controller_spec.rb
803
803
  - spec/controllers/guide_progress_controller_spec.rb
804
804
  - spec/controllers/invitations_controller_spec.rb
805
805
  - spec/controllers/messages_controller_spec.rb
@@ -984,135 +984,136 @@ signing_key:
984
984
  specification_version: 4
985
985
  summary: Code assement web application for the Mumuki Platform.
986
986
  test_files:
987
- - spec/features/disable_user_flow_spec.rb
988
- - spec/features/exercise_flow_spec.rb
989
- - spec/features/certificate_programs_flow_spec.rb
990
- - spec/features/progressive_tips_spec.rb
991
- - spec/features/runner_assets_spec.rb
992
- - spec/features/guide_reset_spec.rb
993
- - spec/features/home_public_flow_spec.rb
994
- - spec/features/links_flow_spec.rb
995
- - spec/features/not_found_private_flow_spec.rb
996
- - spec/features/dynamic_exam_spec.rb
997
- - spec/features/chapters_flow_spec.rb
998
- - spec/features/read_only_flow_spec.rb
999
- - spec/features/discussion_flow_spec.rb
1000
- - spec/features/complements_flow_spec.rb
1001
- - spec/features/standard_flow_spec.rb
1002
- - spec/features/user_activity_flow_spec.rb
1003
- - spec/features/invitations_flow_spec.rb
1004
- - spec/features/home_private_flow_spec.rb
1005
- - spec/features/exams_flow_spec.rb
1006
- - spec/features/topic_flow_spec.rb
1007
- - spec/features/login_flow_spec.rb
1008
- - spec/features/not_found_public_flow_spec.rb
1009
- - spec/features/immersive_redirection_spec.rb
1010
- - spec/features/disabled_organization_flow_spec.rb
1011
- - spec/features/lessons_flow_spec.rb
1012
- - spec/features/guides_flow_spec.rb
1013
- - spec/features/notifications_flow_spec.rb
1014
- - spec/features/menu_bar_spec.rb
1015
- - spec/features/profile_flow_spec.rb
1016
- - spec/features/terms_flow_spec.rb
1017
- - spec/javascripts/results-renderers-spec.js
987
+ - spec/evaluation_helper.rb
988
+ - spec/spec_helper.rb
989
+ - spec/capybara_helper.rb
990
+ - spec/login_helper.rb
991
+ - spec/javascripts/events-spec.js
1018
992
  - spec/javascripts/i18n-spec.js
1019
- - spec/javascripts/gamification-spec.js
1020
- - spec/javascripts/global-spec.js
1021
- - spec/javascripts/elipsis-spec.js
993
+ - spec/javascripts/bridge-spec.js
1022
994
  - spec/javascripts/kids-button-spec.js
1023
- - spec/javascripts/sync-mode-spec.js
1024
- - spec/javascripts/spec-helper.js
995
+ - spec/javascripts/gamification-spec.js
1025
996
  - spec/javascripts/timer-spec.js
1026
- - spec/javascripts/csrf-token-spec.js
1027
- - spec/javascripts/submissions-store-spec.js
1028
- - spec/javascripts/timeout-spec.js
1029
- - spec/javascripts/editors-spec.js
1030
997
  - spec/javascripts/speech-bubble-renderer-spec.js
998
+ - spec/javascripts/results-renderers-spec.js
1031
999
  - spec/javascripts/upload-spec.js
1000
+ - spec/javascripts/sync-mode-spec.js
1001
+ - spec/javascripts/submissions-store-spec.js
1002
+ - spec/javascripts/elipsis-spec.js
1032
1003
  - spec/javascripts/exercise-spec.js
1033
- - spec/javascripts/events-spec.js
1034
- - spec/javascripts/bridge-spec.js
1035
- - spec/spec_helper.rb
1036
- - spec/teaspoon_env.rb
1037
- - spec/evaluation_helper.rb
1038
- - spec/dummy/public/medal/outline.svg
1039
- - spec/dummy/public/error/404.svg
1040
- - spec/dummy/public/error/500.svg
1004
+ - spec/javascripts/csrf-token-spec.js
1005
+ - spec/javascripts/editors-spec.js
1006
+ - spec/javascripts/timeout-spec.js
1007
+ - spec/javascripts/global-spec.js
1008
+ - spec/javascripts/spec-helper.js
1009
+ - spec/helpers/avatar_helper_spec.rb
1010
+ - spec/helpers/email_helper_spec.rb
1011
+ - spec/helpers/certificate_helper_spec.rb
1012
+ - spec/helpers/authors_helper_spec.rb
1013
+ - spec/helpers/page_title_helper_spec.rb
1014
+ - spec/helpers/exercise_input_helper_spec.rb
1015
+ - spec/helpers/with_navigation_spec.rb
1016
+ - spec/helpers/with_choices_spec.rb
1017
+ - spec/helpers/breadcrumbs_helper_spec.rb
1018
+ - spec/helpers/icons_helper_spec.rb
1019
+ - spec/helpers/user_activity_helper_spec.rb
1020
+ - spec/helpers/test_results_rendering_spec.rb
1021
+ - spec/helpers/application_helper_spec.rb
1041
1022
  - spec/dummy/public/error/timeout_3.svg
1042
1023
  - spec/dummy/public/error/timeout_1.svg
1043
- - spec/dummy/public/error/timeout_2.svg
1024
+ - spec/dummy/public/error/500.svg
1044
1025
  - spec/dummy/public/error/401.svg
1045
- - spec/dummy/public/error/403.svg
1026
+ - spec/dummy/public/error/404.svg
1046
1027
  - spec/dummy/public/error/410.svg
1047
- - spec/dummy/public/character/animations.json
1048
- - spec/dummy/public/character/magnifying_glass/apparition.svg
1049
- - spec/dummy/public/character/magnifying_glass/loop.svg
1050
- - spec/dummy/public/character/kibi/failure.svg
1028
+ - spec/dummy/public/error/403.svg
1029
+ - spec/dummy/public/error/timeout_2.svg
1051
1030
  - spec/dummy/public/character/kibi/context.svg
1052
1031
  - spec/dummy/public/character/kibi/passed_with_warnings.svg
1053
- - spec/dummy/public/character/kibi/jump.svg
1054
1032
  - spec/dummy/public/character/kibi/success_l.svg
1033
+ - spec/dummy/public/character/kibi/failure.svg
1055
1034
  - spec/dummy/public/character/kibi/success2_l.svg
1035
+ - spec/dummy/public/character/kibi/jump.svg
1036
+ - spec/dummy/public/character/magnifying_glass/loop.svg
1037
+ - spec/dummy/public/character/magnifying_glass/apparition.svg
1038
+ - spec/dummy/public/character/animations.json
1039
+ - spec/dummy/public/medal/outline.svg
1056
1040
  - spec/dummy/Rakefile
1057
1041
  - spec/dummy/config/application.rb
1058
- - spec/dummy/config/puma.rb
1042
+ - spec/dummy/config/environment.rb
1059
1043
  - spec/dummy/config/spring.rb
1060
- - spec/dummy/config/routes.rb
1061
- - spec/dummy/config/environments/test.rb
1062
- - spec/dummy/config/environments/development.rb
1063
1044
  - spec/dummy/config/database.yml
1045
+ - spec/dummy/config/cable.yml
1046
+ - spec/dummy/config/routes.rb
1047
+ - spec/dummy/config/boot.rb
1048
+ - spec/dummy/config/puma.rb
1049
+ - spec/dummy/config/initializers/cookies_serializer.rb
1050
+ - spec/dummy/config/initializers/filter_parameter_logging.rb
1064
1051
  - spec/dummy/config/initializers/assets.rb
1065
1052
  - spec/dummy/config/initializers/wrap_parameters.rb
1066
- - spec/dummy/config/initializers/filter_parameter_logging.rb
1067
- - spec/dummy/config/initializers/cookies_serializer.rb
1068
1053
  - spec/dummy/config/rabbit.yml
1069
- - spec/dummy/config/locales/en.yml
1070
- - spec/dummy/config/cable.yml
1071
- - spec/dummy/config/environment.rb
1054
+ - spec/dummy/config/environments/development.rb
1055
+ - spec/dummy/config/environments/test.rb
1072
1056
  - spec/dummy/config/secrets.yml
1073
- - spec/dummy/config/boot.rb
1074
- - spec/dummy/package.json
1075
- - spec/dummy/config.ru
1076
- - spec/dummy/db/seeds.rb
1077
- - spec/dummy/db/schema.rb
1078
- - spec/dummy/bin/yarn
1057
+ - spec/dummy/config/locales/en.yml
1079
1058
  - spec/dummy/bin/rails
1059
+ - spec/dummy/bin/yarn
1080
1060
  - spec/dummy/bin/rake
1081
- - spec/dummy/bin/bundle
1082
1061
  - spec/dummy/bin/setup
1083
1062
  - spec/dummy/bin/update
1084
- - spec/controllers/certificates_controller_spec.rb
1085
- - spec/controllers/students_api_controller_spec.rb
1063
+ - spec/dummy/bin/bundle
1064
+ - spec/dummy/package.json
1065
+ - spec/dummy/db/schema.rb
1066
+ - spec/dummy/db/seeds.rb
1067
+ - spec/dummy/config.ru
1068
+ - spec/controllers/discussions_controller_spec.rb
1086
1069
  - spec/controllers/api_clients_controller.rb
1087
- - spec/controllers/organizations_api_controller_spec.rb
1088
- - spec/controllers/exam_authorization_requests_controller_spec.rb
1070
+ - spec/controllers/messages_controller_spec.rb
1089
1071
  - spec/controllers/confirmations_controller_spec.rb
1090
- - spec/controllers/exam_registrations_controller_spec.rb
1072
+ - spec/controllers/invitations_controller_spec.rb
1091
1073
  - spec/controllers/users_controller_spec.rb
1092
- - spec/controllers/exercise_solutions_controller_spec.rb
1093
- - spec/controllers/discussions_controller_spec.rb
1094
1074
  - spec/controllers/courses_api_controller_spec.rb
1095
- - spec/controllers/discussions_messages_controller_spec.rb
1096
- - spec/controllers/users_api_controller_spec.rb
1097
- - spec/controllers/messages_controller_spec.rb
1098
- - spec/controllers/invitations_controller_spec.rb
1075
+ - spec/controllers/students_api_controller_spec.rb
1099
1076
  - spec/controllers/guide_progress_controller_spec.rb
1100
1077
  - spec/controllers/chapters_controller_spec.rb
1101
- - spec/login_helper.rb
1078
+ - spec/controllers/exercise_solutions_controller_spec.rb
1079
+ - spec/controllers/exercises_controller_spec.rb
1080
+ - spec/controllers/discussions_messages_controller_spec.rb
1081
+ - spec/controllers/organizations_api_controller_spec.rb
1082
+ - spec/controllers/exam_registrations_controller_spec.rb
1083
+ - spec/controllers/certificates_controller_spec.rb
1084
+ - spec/controllers/exam_authorization_requests_controller_spec.rb
1085
+ - spec/controllers/users_api_controller_spec.rb
1086
+ - spec/api_helper.rb
1102
1087
  - spec/mailers/previews/user_mailer_preview.rb
1103
1088
  - spec/mailers/user_mailer_spec.rb
1104
- - spec/capybara_helper.rb
1105
- - spec/helpers/icons_helper_spec.rb
1106
- - spec/helpers/certificate_helper_spec.rb
1107
- - spec/helpers/test_results_rendering_spec.rb
1108
- - spec/helpers/avatar_helper_spec.rb
1109
- - spec/helpers/exercise_input_helper_spec.rb
1110
- - spec/helpers/with_navigation_spec.rb
1111
- - spec/helpers/email_helper_spec.rb
1112
- - spec/helpers/user_activity_helper_spec.rb
1113
- - spec/helpers/with_choices_spec.rb
1114
- - spec/helpers/breadcrumbs_helper_spec.rb
1115
- - spec/helpers/page_title_helper_spec.rb
1116
- - spec/helpers/application_helper_spec.rb
1117
- - spec/helpers/authors_helper_spec.rb
1118
- - spec/api_helper.rb
1089
+ - spec/features/login_flow_spec.rb
1090
+ - spec/features/links_flow_spec.rb
1091
+ - spec/features/notifications_flow_spec.rb
1092
+ - spec/features/dynamic_exam_spec.rb
1093
+ - spec/features/immersive_redirection_spec.rb
1094
+ - spec/features/invitations_flow_spec.rb
1095
+ - spec/features/chapters_flow_spec.rb
1096
+ - spec/features/read_only_flow_spec.rb
1097
+ - spec/features/home_public_flow_spec.rb
1098
+ - spec/features/runner_assets_spec.rb
1099
+ - spec/features/disabled_organization_flow_spec.rb
1100
+ - spec/features/user_activity_flow_spec.rb
1101
+ - spec/features/guides_flow_spec.rb
1102
+ - spec/features/terms_flow_spec.rb
1103
+ - spec/features/home_private_flow_spec.rb
1104
+ - spec/features/progressive_tips_spec.rb
1105
+ - spec/features/not_found_private_flow_spec.rb
1106
+ - spec/features/exercise_flow_spec.rb
1107
+ - spec/features/profile_flow_spec.rb
1108
+ - spec/features/certificate_programs_flow_spec.rb
1109
+ - spec/features/guide_reset_spec.rb
1110
+ - spec/features/topic_flow_spec.rb
1111
+ - spec/features/not_found_public_flow_spec.rb
1112
+ - spec/features/disable_user_flow_spec.rb
1113
+ - spec/features/lessons_flow_spec.rb
1114
+ - spec/features/menu_bar_spec.rb
1115
+ - spec/features/standard_flow_spec.rb
1116
+ - spec/features/discussion_flow_spec.rb
1117
+ - spec/features/exams_flow_spec.rb
1118
+ - spec/features/complements_flow_spec.rb
1119
+ - spec/teaspoon_env.rb
@@ -1,3 +0,0 @@
1
- .alert {
2
- margin-right: 15px;
3
- }