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 +4 -4
- data/app/assets/javascripts/mumuki_laboratory/application/timer.js +2 -5
- data/app/assets/stylesheets/mumuki_laboratory/application/_layout.scss +0 -8
- data/app/assets/stylesheets/mumuki_laboratory/application/modules/_user_profile.scss +1 -9
- data/app/assets/stylesheets/mumuki_laboratory/application.scss +0 -1
- data/app/controllers/application_controller.rb +1 -2
- data/app/controllers/exam_authorization_requests_controller.rb +8 -4
- data/app/controllers/exercises_controller.rb +0 -1
- data/app/helpers/profile_helper.rb +1 -1
- data/app/views/exercises/show.html.erb +1 -1
- data/app/views/guides/_guide.html.erb +1 -1
- data/app/views/layouts/_timer.html.erb +1 -1
- data/app/views/users/_basic_profile_fields.html.erb +20 -16
- data/app/views/users/_edit_user_form.html.erb +9 -7
- data/lib/mumuki/laboratory/controllers/validate_access_mode.rb +5 -0
- data/lib/mumuki/laboratory/locales/en.yml +2 -2
- data/lib/mumuki/laboratory/locales/es-CL.yml +2 -2
- data/lib/mumuki/laboratory/locales/es.yml +2 -2
- data/lib/mumuki/laboratory/locales/pt.yml +2 -2
- data/lib/mumuki/laboratory/version.rb +1 -1
- data/spec/controllers/exercises_controller_spec.rb +32 -0
- data/spec/dummy/db/seeds.rb +16 -8
- data/spec/features/read_only_flow_spec.rb +14 -16
- metadata +104 -103
- data/app/assets/stylesheets/mumuki_laboratory/application/_alerts.scss +0 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 11031aa81120210f592a1d2d752213aa71f526e4d74f1b4eadfc14602db2543f
|
4
|
+
data.tar.gz: d384d4bc85bab893488bbbc2c41a964accc9fa8070bebecc06328617175466dd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: aadaa5c19b73a86d980aca9e7b2eb7ee9f839d3a595ead5443f8cdc2d994ebd486bcebe994e2f73cbddea9f9be7ce5f0d45a566f1d2e63c497d805f9c124c63d
|
7
|
+
data.tar.gz: a35d874f27b0ac4dbe30b4f4162214d54023418d0410facc140329cd605790800b90997426412a1efba3fd0de856bccc232451054c256ad0840c69f645fa8963
|
@@ -1,9 +1,6 @@
|
|
1
1
|
mumuki.startTimer = (() => {
|
2
|
-
function startTimer(
|
3
|
-
var
|
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 () {
|
@@ -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 {
|
@@ -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
|
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 =
|
11
|
-
redirect_to
|
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 =
|
17
|
-
redirect_to
|
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
|
@@ -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-
|
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: {
|
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: {
|
6
|
+
<%= render partial: 'layouts/timer', locals: { duration: subject.time_left(current_user) } %>
|
7
7
|
<% end %>
|
8
8
|
|
9
9
|
<%= yield if block_given? %>
|
@@ -1,19 +1,23 @@
|
|
1
|
-
<
|
2
|
-
<
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
<
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
<
|
14
|
-
|
15
|
-
|
16
|
-
|
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
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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!
|
@@ -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
|
data/spec/dummy/db/seeds.rb
CHANGED
@@ -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: '
|
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
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
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: '
|
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
|
473
|
+
scenario 'avatar dropdown' do
|
474
474
|
visit "/"
|
475
475
|
find('#profileDropdown').click
|
476
|
-
expect(page).
|
477
|
-
expect(page).
|
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).
|
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('
|
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('
|
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('
|
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('
|
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('
|
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
|
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.
|
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-
|
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.
|
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.
|
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/
|
988
|
-
- spec/
|
989
|
-
- spec/
|
990
|
-
- spec/
|
991
|
-
- spec/
|
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/
|
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/
|
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/
|
1034
|
-
- spec/javascripts/
|
1035
|
-
- spec/
|
1036
|
-
- spec/
|
1037
|
-
- spec/
|
1038
|
-
- spec/
|
1039
|
-
- spec/
|
1040
|
-
- spec/
|
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/
|
1024
|
+
- spec/dummy/public/error/500.svg
|
1044
1025
|
- spec/dummy/public/error/401.svg
|
1045
|
-
- spec/dummy/public/error/
|
1026
|
+
- spec/dummy/public/error/404.svg
|
1046
1027
|
- spec/dummy/public/error/410.svg
|
1047
|
-
- spec/dummy/public/
|
1048
|
-
- spec/dummy/public/
|
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/
|
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/
|
1070
|
-
- spec/dummy/config/
|
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/
|
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/
|
1085
|
-
- spec/
|
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/
|
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/
|
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/
|
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/
|
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/
|
1105
|
-
- spec/
|
1106
|
-
- spec/
|
1107
|
-
- spec/
|
1108
|
-
- spec/
|
1109
|
-
- spec/
|
1110
|
-
- spec/
|
1111
|
-
- spec/
|
1112
|
-
- spec/
|
1113
|
-
- spec/
|
1114
|
-
- spec/
|
1115
|
-
- spec/
|
1116
|
-
- spec/
|
1117
|
-
- spec/
|
1118
|
-
- spec/
|
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
|