mumuki-laboratory 8.6.0 → 9.0.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (82) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/mumuki_laboratory/application/certificate.js +17 -0
  3. data/app/assets/javascripts/mumuki_laboratory/application/faqs.js +90 -0
  4. data/app/assets/javascripts/mumuki_laboratory/application/upload.js +69 -14
  5. data/app/assets/javascripts/mumuki_laboratory/application/user.js +16 -5
  6. data/app/assets/stylesheets/mumuki_laboratory/application/_layout.scss +3 -0
  7. data/app/assets/stylesheets/mumuki_laboratory/application/_modules.scss +3 -0
  8. data/app/assets/stylesheets/mumuki_laboratory/application/modules/_certificate.scss +33 -0
  9. data/app/assets/stylesheets/mumuki_laboratory/application/modules/_content_show.scss +15 -2
  10. data/app/assets/stylesheets/mumuki_laboratory/application/modules/_faqs.scss +84 -0
  11. data/app/assets/stylesheets/mumuki_laboratory/application/modules/_medal.scss +1 -1
  12. data/app/assets/stylesheets/mumuki_laboratory/application/modules/_user_menu.scss +63 -0
  13. data/app/assets/stylesheets/mumuki_laboratory/application/modules/_user_profile.scss +11 -0
  14. data/app/controllers/api/base_controller.rb +0 -1
  15. data/app/controllers/api/courses_controller.rb +1 -1
  16. data/app/controllers/api/organizations_controller.rb +5 -2
  17. data/app/controllers/api/roles_controller.rb +4 -0
  18. data/app/controllers/api/users_controller.rb +6 -1
  19. data/app/controllers/certificates_controller.rb +28 -0
  20. data/app/controllers/concerns/with_authorization.rb +1 -16
  21. data/app/controllers/concerns/with_certificate_render.rb +25 -0
  22. data/app/controllers/concerns/with_user_params.rb +4 -0
  23. data/app/controllers/discussions_messages_controller.rb +0 -1
  24. data/app/controllers/faqs_controller.rb +6 -0
  25. data/app/controllers/users_controller.rb +12 -5
  26. data/app/helpers/breadcrumbs_helper.rb +4 -0
  27. data/app/helpers/certificate_helper.rb +13 -0
  28. data/app/helpers/content_view_helper.rb +19 -0
  29. data/app/helpers/exercise_input_helper.rb +8 -17
  30. data/app/helpers/links_helper.rb +11 -3
  31. data/app/helpers/menu_bar_helper.rb +15 -11
  32. data/app/helpers/user_menu_helper.rb +36 -0
  33. data/app/mailers/application_mailer.rb +0 -1
  34. data/app/mailers/user_mailer.rb +9 -0
  35. data/app/views/certificates/_certificate.html.erb +44 -0
  36. data/app/views/certificates/_download.html.erb +20 -0
  37. data/app/views/certificates/verify.html.erb +40 -0
  38. data/app/views/chapters/show.html.erb +15 -14
  39. data/app/views/complements/show.html.erb +1 -1
  40. data/app/views/exams/show.html.erb +1 -1
  41. data/app/views/{layouts → exercises}/_exercise_skipped.html.erb +0 -0
  42. data/app/views/exercises/_exercise_title_icons.html.erb +4 -0
  43. data/app/views/exercises/show.html.erb +4 -7
  44. data/app/views/faqs/index.html.erb +20 -0
  45. data/app/views/{layouts → guides}/_guide.html.erb +0 -0
  46. data/app/views/guides/_guide_container.html.erb +24 -0
  47. data/app/views/{layouts → guides}/_guide_title_icons.html.erb +1 -3
  48. data/app/views/layouts/_progress_listing.html.erb +1 -1
  49. data/app/views/layouts/_user_menu.html.erb +17 -0
  50. data/app/views/layouts/application.html.erb +6 -1
  51. data/app/views/layouts/exercise_inputs/editors/_code.html.erb +2 -1
  52. data/app/views/layouts/exercise_inputs/editors/_upload.html.erb +11 -2
  53. data/app/views/lessons/show.html.erb +1 -1
  54. data/app/views/user_mailer/certificate.html.erb +339 -0
  55. data/app/views/user_mailer/certificate.text.erb +10 -0
  56. data/app/views/users/_user_form.html.erb +10 -8
  57. data/app/views/users/certificates.html.erb +32 -0
  58. data/app/views/users/discussions.html.erb +28 -0
  59. data/app/views/users/edit.html.erb +1 -1
  60. data/app/views/users/messages.html.erb +27 -0
  61. data/app/views/users/show.html.erb +4 -51
  62. data/app/views/users/terms.html.erb +2 -2
  63. data/config/routes.rb +9 -0
  64. data/lib/mumuki/laboratory/locales/en.yml +13 -3
  65. data/lib/mumuki/laboratory/locales/es-CL.yml +13 -3
  66. data/lib/mumuki/laboratory/locales/es.yml +12 -2
  67. data/lib/mumuki/laboratory/locales/pt.yml +12 -2
  68. data/lib/mumuki/laboratory/version.rb +1 -1
  69. data/spec/controllers/certificates_controller_spec.rb +15 -0
  70. data/spec/controllers/organizations_api_controller_spec.rb +16 -9
  71. data/spec/dummy/db/schema.rb +25 -1
  72. data/spec/features/certificate_programs_flow_spec.rb +17 -0
  73. data/spec/features/exercise_flow_spec.rb +3 -3
  74. data/spec/features/login_flow_spec.rb +1 -1
  75. data/spec/features/menu_bar_spec.rb +44 -24
  76. data/spec/features/profile_flow_spec.rb +18 -9
  77. data/spec/features/terms_flow_spec.rb +30 -0
  78. data/spec/helpers/application_helper_spec.rb +10 -0
  79. data/spec/helpers/certificate_helper_spec.rb +15 -0
  80. data/spec/javascripts/upload-spec.js +80 -0
  81. metadata +86 -14
  82. data/app/views/layouts/_guide_container.html.erb +0 -28
@@ -95,34 +95,43 @@ feature 'Profile Flow', organization_workspace: :test do
95
95
  visit "/user/edit"
96
96
  fill_in('user_first_name', with: 'first_name')
97
97
 
98
- # Match :first is used because there are two buttons: mobile and desktop.
99
98
  click_on(button_options)
100
- expect(page).to have_text('Your data was updated successfuly')
101
- expect(page).to have_text('Profile')
99
+ expect(page).to have_text('Your data was updated successfully')
100
+ expect(page).to have_text('My profile')
102
101
  end
103
102
  end
104
103
  end
105
104
 
106
105
  context 'with no messages' do
107
-
108
- scenario 'visit messages tab' do
109
- visit "/user#messages"
106
+ scenario 'visit messages' do
107
+ visit "/user/messages"
110
108
 
111
109
  expect(page).to have_text('It seems you don\'t have any messages yet!')
112
110
  end
113
111
  end
114
112
 
115
113
  context 'with messages' do
116
- scenario 'visit messages tab' do
114
+ scenario 'visit messages' do
117
115
  Organization.find_by_name('test').switch!
118
116
  problem.submit_solution! user, {content: 'something'}
119
117
  Message.import_from_resource_h! message
120
- visit "/user#messages"
118
+ visit "/user/messages"
121
119
 
122
120
  expect(page).to_not have_text('It seems you don\'t have any messages yet!')
123
121
  expect(page).to have_text(problem.name)
124
122
  end
125
123
  end
126
- end
127
124
 
125
+ context 'visit certificates tab' do
126
+ before { Organization.find_by_name('test').switch! }
127
+ before { create :certificate, user: user, code: 'abc' }
128
+ before { visit '/user/certificates' }
129
+
130
+ scenario { expect(page).to have_text('Test - Certificate program to test') }
131
+ scenario { expect(page).to have_link(href: /certificates\/verify\/abc/) }
132
+ scenario { expect(page).to have_link(href: /linkedin.com\/profile\/add/) }
133
+ scenario { expect(page).to have_link(href: /certificates\/download\/abc/) }
134
+ end
135
+
136
+ end
128
137
  end
@@ -153,5 +153,35 @@ feature 'Terms Flow', organization_workspace: :test do
153
153
  end
154
154
  end
155
155
 
156
+ context 'with incognito mode' do
157
+ before { test_organization.update! incognito_mode_enabled: true }
158
+
159
+ describe 'visit user terms path' do
160
+ let(:terms_path) { '/user/terms' }
161
+ let(:expected_terms) { general_terms_scopes }
162
+
163
+ it_behaves_like 'has expected terms'
164
+ end
165
+
166
+ scenario 'visit any other path' do
167
+ visit '/'
168
+
169
+ expect(page).to have_text('Start Practicing')
170
+ end
171
+
172
+ context 'visit forum' do
173
+ let(:terms_path) { '/discussions/terms' }
174
+
175
+ context 'with enabled forum' do
176
+ before { test_organization.update! forum_enabled: true }
177
+
178
+ scenario 'visit forum' do
179
+ visit '/discussions/terms'
180
+ expect(page).to have_text('You may have mistyped the address or the page may have moved')
181
+ end
182
+ end
183
+ end
184
+ end
185
+
156
186
  end
157
187
 
@@ -26,4 +26,14 @@ describe ApplicationHelper, organization_workspace: :test do
26
26
  it { expect(link_to_path_element(lesson)).to start_with '<a href="/lessons/1-foo">foo' }
27
27
  end
28
28
 
29
+ describe 'bibliotheca links' do
30
+ let(:current_user) { create(:user) }
31
+ let(:lesson) { create(:lesson, id: 1, name: 'foo') }
32
+ let(:guide) { lesson.guide }
33
+
34
+ before { current_user.make_editor_of! guide.slug }
35
+
36
+ it { expect(url_for_bibliotheca_guide(guide)).to start_with 'http://bibliotheca.localmumuki.io/#/guides/mumuki/mumuki-test-lesson' }
37
+ end
38
+
29
39
  end
@@ -0,0 +1,15 @@
1
+ require 'spec_helper'
2
+
3
+ describe CertificateHelper, organization_workspace: :test do
4
+ helper CertificateHelper
5
+
6
+ describe '#linkedin_url_to_post' do
7
+
8
+ let(:certificate) { create :certificate, code: 'abc', created_at: Time.new(2000, 1, 1) }
9
+ let(:link) { "https://www.linkedin.com/profile/add?startTask=CERTIFICATION_NAME&name=Test&organizationId=1&issueYear=2000&issueMonth=1&certUrl=http%3A%2F%2Ftest.localmumuki.io%2Fcertificates%2Fverify%2Fabc&certId=abc" }
10
+
11
+ before { allow(ENV).to receive(:[]).with('MUMUKI_LINKEDIN_ORGANIZATION_ID').and_return '1' }
12
+ it { expect(linkedin_post_url(certificate).to_s).to eq link }
13
+ end
14
+
15
+ end
@@ -0,0 +1,80 @@
1
+ describe('upload', () => {
2
+ const fileSizeLimit = 20;
3
+
4
+ fixture.set(`
5
+ <textarea id="solution_content" type="text" name="solution[content]" class="hidden"></textarea>
6
+ <input id="mu-upload-input" type="file" class="upload submission-control hidden" mu-upload-file-limit=${fileSizeLimit} accept=".txt" />
7
+ <label id="mu-upload-label" for="mu-upload-input" class="btn btn-success"></label>
8
+ <button class="btn btn-success btn-block btn-submit disabled"></button>
9
+ <div id="mu-upload-file-limit-exceeded" class="hidden"></div>
10
+ `);
11
+
12
+ beforeEach(() => {
13
+ mumuki.upload._setUI();
14
+ });
15
+
16
+ function reader(file, done) {
17
+ let fileReader = new mumuki.upload.FileUploader(file).uploadFileIfValid();
18
+ if (fileReader) {
19
+ fileReader.addEventListener('load', () => done());
20
+ fileReader.addEventListener('error', done);
21
+ return fileReader;
22
+ } else {
23
+ done();
24
+ }
25
+ }
26
+
27
+ describe('no file is uploaded', () => {
28
+ beforeEach((done) => {
29
+ reader(null, done);
30
+ });
31
+
32
+ it('loads no solution', function () {
33
+ expect($('#solution_content').html()).toEqual('');
34
+ });
35
+
36
+ it('does not allow submitting', function () {
37
+ expect($('.btn-submit').hasClass('disabled')).toBe(true);
38
+ });
39
+
40
+ it('does not exceed max file size', function () {
41
+ expect($('#mu-upload-file-limit-exceeded').hasClass('hidden')).toBe(true);
42
+ });
43
+ });
44
+
45
+ describe('small file is uploaded', () => {
46
+ beforeEach((done) => {
47
+ reader(new File(["short solution"], "short.txt"), done);
48
+ });
49
+
50
+ it('loads solution', function () {
51
+ expect($('#solution_content').html()).toEqual('short solution');
52
+ });
53
+
54
+ it('allows submitting', function () {
55
+ expect($('.btn-submit').hasClass('disabled')).toBe(false);
56
+ });
57
+
58
+ it('does not exceed max file size', function () {
59
+ expect($('#mu-upload-file-limit-exceeded').hasClass('hidden')).toBe(true);
60
+ });
61
+ });
62
+
63
+ describe('large file is uploaded', () => {
64
+ beforeEach((done) => {
65
+ reader(new File(["solution that is too long to be allowed"], "long.txt"), done);
66
+ });
67
+
68
+ it('loads no solution', function () {
69
+ expect($('#solution_content').html()).toEqual('');
70
+ });
71
+
72
+ it('does not allow submitting', function () {
73
+ expect($('.btn-submit').hasClass('disabled')).toBe(true);
74
+ });
75
+
76
+ it('exceeds max file size', function () {
77
+ expect($('#mu-upload-file-limit-exceeded').hasClass('hidden')).toBe(false);
78
+ });
79
+ });
80
+ });
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: 8.6.0
4
+ version: 9.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Franco Bulgarelli
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-02-12 00:00:00.000000000 Z
11
+ date: 2021-03-10 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: 8.6.0
33
+ version: 9.0.2
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: 8.6.0
40
+ version: 9.0.2
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: mumukit-bridge
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -58,14 +58,14 @@ dependencies:
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '7.3'
61
+ version: '7.6'
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '7.3'
68
+ version: '7.6'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: mumukit-nuntius
71
71
  requirement: !ruby/object:Gem::Requirement
@@ -290,6 +290,48 @@ dependencies:
290
290
  - - "~>"
291
291
  - !ruby/object:Gem::Version
292
292
  version: '3.7'
293
+ - !ruby/object:Gem::Dependency
294
+ name: wkhtmltopdf-binary
295
+ requirement: !ruby/object:Gem::Requirement
296
+ requirements:
297
+ - - "~>"
298
+ - !ruby/object:Gem::Version
299
+ version: '0.12'
300
+ type: :runtime
301
+ prerelease: false
302
+ version_requirements: !ruby/object:Gem::Requirement
303
+ requirements:
304
+ - - "~>"
305
+ - !ruby/object:Gem::Version
306
+ version: '0.12'
307
+ - !ruby/object:Gem::Dependency
308
+ name: wicked_pdf
309
+ requirement: !ruby/object:Gem::Requirement
310
+ requirements:
311
+ - - "~>"
312
+ - !ruby/object:Gem::Version
313
+ version: '1.4'
314
+ type: :runtime
315
+ prerelease: false
316
+ version_requirements: !ruby/object:Gem::Requirement
317
+ requirements:
318
+ - - "~>"
319
+ - !ruby/object:Gem::Version
320
+ version: '1.4'
321
+ - !ruby/object:Gem::Dependency
322
+ name: rqrcode
323
+ requirement: !ruby/object:Gem::Requirement
324
+ requirements:
325
+ - - "~>"
326
+ - !ruby/object:Gem::Version
327
+ version: '1.2'
328
+ type: :runtime
329
+ prerelease: false
330
+ version_requirements: !ruby/object:Gem::Requirement
331
+ requirements:
332
+ - - "~>"
333
+ - !ruby/object:Gem::Version
334
+ version: '1.2'
293
335
  - !ruby/object:Gem::Dependency
294
336
  name: pg
295
337
  requirement: !ruby/object:Gem::Requirement
@@ -356,6 +398,7 @@ files:
356
398
  - app/assets/javascripts/mumuki_laboratory/application/assets-loader.js
357
399
  - app/assets/javascripts/mumuki_laboratory/application/bridge.js
358
400
  - app/assets/javascripts/mumuki_laboratory/application/button.js
401
+ - app/assets/javascripts/mumuki_laboratory/application/certificate.js
359
402
  - app/assets/javascripts/mumuki_laboratory/application/characters.js
360
403
  - app/assets/javascripts/mumuki_laboratory/application/codemirror-builder.js
361
404
  - app/assets/javascripts/mumuki_laboratory/application/codemirror.js
@@ -368,6 +411,7 @@ files:
368
411
  - app/assets/javascripts/mumuki_laboratory/application/elipsis.js
369
412
  - app/assets/javascripts/mumuki_laboratory/application/events.js
370
413
  - app/assets/javascripts/mumuki_laboratory/application/exercise.js
414
+ - app/assets/javascripts/mumuki_laboratory/application/faqs.js
371
415
  - app/assets/javascripts/mumuki_laboratory/application/free-form.js
372
416
  - app/assets/javascripts/mumuki_laboratory/application/gamification.js
373
417
  - app/assets/javascripts/mumuki_laboratory/application/i18n.js
@@ -414,6 +458,7 @@ files:
414
458
  - app/assets/stylesheets/mumuki_laboratory/application/modules/_avatar.scss
415
459
  - app/assets/stylesheets/mumuki_laboratory/application/modules/_book_header.scss
416
460
  - app/assets/stylesheets/mumuki_laboratory/application/modules/_breadcrumb.scss
461
+ - app/assets/stylesheets/mumuki_laboratory/application/modules/_certificate.scss
417
462
  - app/assets/stylesheets/mumuki_laboratory/application/modules/_checkboxes.scss
418
463
  - app/assets/stylesheets/mumuki_laboratory/application/modules/_console.scss
419
464
  - app/assets/stylesheets/mumuki_laboratory/application/modules/_content_show.scss
@@ -423,6 +468,7 @@ files:
423
468
  - app/assets/stylesheets/mumuki_laboratory/application/modules/_editor.scss
424
469
  - app/assets/stylesheets/mumuki_laboratory/application/modules/_exercise_assignment.scss
425
470
  - app/assets/stylesheets/mumuki_laboratory/application/modules/_exercise_results.scss
471
+ - app/assets/stylesheets/mumuki_laboratory/application/modules/_faqs.scss
426
472
  - app/assets/stylesheets/mumuki_laboratory/application/modules/_flash.scss
427
473
  - app/assets/stylesheets/mumuki_laboratory/application/modules/_gs-board.scss
428
474
  - app/assets/stylesheets/mumuki_laboratory/application/modules/_guide_corollary.scss
@@ -440,6 +486,7 @@ files:
440
486
  - app/assets/stylesheets/mumuki_laboratory/application/modules/_terms.scss
441
487
  - app/assets/stylesheets/mumuki_laboratory/application/modules/_timer.scss
442
488
  - app/assets/stylesheets/mumuki_laboratory/application/modules/_upload.scss
489
+ - app/assets/stylesheets/mumuki_laboratory/application/modules/_user_menu.scss
443
490
  - app/assets/stylesheets/mumuki_laboratory/application/modules/_user_profile.scss
444
491
  - app/controllers/ajax_controller.rb
445
492
  - app/controllers/api/base_controller.rb
@@ -454,12 +501,14 @@ files:
454
501
  - app/controllers/assets_controller.rb
455
502
  - app/controllers/book_controller.rb
456
503
  - app/controllers/book_discussions_controller.rb
504
+ - app/controllers/certificates_controller.rb
457
505
  - app/controllers/chapters_controller.rb
458
506
  - app/controllers/complements_controller.rb
459
507
  - app/controllers/concerns/on_base_organization_only.rb
460
508
  - app/controllers/concerns/organizations_controller_template.rb
461
509
  - app/controllers/concerns/users_controller_template.rb
462
510
  - app/controllers/concerns/with_authorization.rb
511
+ - app/controllers/concerns/with_certificate_render.rb
463
512
  - app/controllers/concerns/with_errors_filter.rb
464
513
  - app/controllers/concerns/with_user_discussion_validation.rb
465
514
  - app/controllers/concerns/with_user_params.rb
@@ -473,6 +522,7 @@ files:
473
522
  - app/controllers/exercise_solutions_controller.rb
474
523
  - app/controllers/exercise_tries_controller.rb
475
524
  - app/controllers/exercises_controller.rb
525
+ - app/controllers/faqs_controller.rb
476
526
  - app/controllers/guide_container_controller.rb
477
527
  - app/controllers/guide_progress_controller.rb
478
528
  - app/controllers/guides_controller.rb
@@ -489,12 +539,14 @@ files:
489
539
  - app/helpers/authors_helper.rb
490
540
  - app/helpers/avatar_helper.rb
491
541
  - app/helpers/breadcrumbs_helper.rb
542
+ - app/helpers/certificate_helper.rb
492
543
  - app/helpers/choices_helper.rb
493
544
  - app/helpers/concerns/with_student_path_navigation.rb
494
545
  - app/helpers/concerns/with_student_path_navigation/continue_navigation.rb
495
546
  - app/helpers/concerns/with_student_path_navigation/finish_navigation.rb
496
547
  - app/helpers/concerns/with_student_path_navigation/navigation.rb
497
548
  - app/helpers/concerns/with_student_path_navigation/revisit_navigation.rb
549
+ - app/helpers/content_view_helper.rb
498
550
  - app/helpers/contextualization_result_helper.rb
499
551
  - app/helpers/discussions_helper.rb
500
552
  - app/helpers/editor_helper.rb
@@ -518,12 +570,16 @@ files:
518
570
  - app/helpers/progress_bar_helper.rb
519
571
  - app/helpers/progress_helper.rb
520
572
  - app/helpers/runner_assets_helper.rb
573
+ - app/helpers/user_menu_helper.rb
521
574
  - app/mailers/application_mailer.rb
522
575
  - app/mailers/user_mailer.rb
523
576
  - app/views/appendixes/show.html.erb
524
577
  - app/views/book/_header.html.erb
525
578
  - app/views/book/show.html.erb
526
579
  - app/views/book_discussions/index.html.erb
580
+ - app/views/certificates/_certificate.html.erb
581
+ - app/views/certificates/_download.html.erb
582
+ - app/views/certificates/verify.html.erb
527
583
  - app/views/chapters/show.html.erb
528
584
  - app/views/complements/show.html.erb
529
585
  - app/views/discussions/_description_message.html.erb
@@ -555,18 +611,20 @@ files:
555
611
  - app/views/exercise_solutions/_results_hidden.html.erb
556
612
  - app/views/exercise_solutions/_results_title.html.erb
557
613
  - app/views/exercises/_exercise_assignment.html.erb
614
+ - app/views/exercises/_exercise_skipped.html.erb
615
+ - app/views/exercises/_exercise_title_icons.html.erb
558
616
  - app/views/exercises/_read_only.html.erb
559
617
  - app/views/exercises/show.html.erb
618
+ - app/views/faqs/index.html.erb
619
+ - app/views/guides/_guide.html.erb
620
+ - app/views/guides/_guide_container.html.erb
621
+ - app/views/guides/_guide_title_icons.html.erb
560
622
  - app/views/invitations/_invitation_form.html.erb
561
623
  - app/views/invitations/show.html.erb
562
624
  - app/views/layouts/_authoring.html.erb
563
625
  - app/views/layouts/_copyright.html.erb
564
626
  - app/views/layouts/_discussions.html.erb
565
627
  - app/views/layouts/_error.html.erb
566
- - app/views/layouts/_exercise_skipped.html.erb
567
- - app/views/layouts/_guide.html.erb
568
- - app/views/layouts/_guide_container.html.erb
569
- - app/views/layouts/_guide_title_icons.html.erb
570
628
  - app/views/layouts/_kids.html.erb
571
629
  - app/views/layouts/_kindergarten.html.erb
572
630
  - app/views/layouts/_main.html.erb
@@ -585,6 +643,7 @@ files:
585
643
  - app/views/layouts/_terms_acceptance_disclaimer.html.erb
586
644
  - app/views/layouts/_test_results.html.erb
587
645
  - app/views/layouts/_timer.html.erb
646
+ - app/views/layouts/_user_menu.html.erb
588
647
  - app/views/layouts/application.html.erb
589
648
  - app/views/layouts/embedded.html.erb
590
649
  - app/views/layouts/exercise_inputs/editors/_code.html.erb
@@ -638,6 +697,8 @@ files:
638
697
  - app/views/user_mailer/2nd_reminder.text.erb
639
698
  - app/views/user_mailer/3rd_reminder.html.erb
640
699
  - app/views/user_mailer/3rd_reminder.text.erb
700
+ - app/views/user_mailer/certificate.html.erb
701
+ - app/views/user_mailer/certificate.text.erb
641
702
  - app/views/user_mailer/no_submissions_reminder.html.erb
642
703
  - app/views/user_mailer/no_submissions_reminder.text.erb
643
704
  - app/views/users/_avatar_list.html.erb
@@ -645,7 +706,10 @@ files:
645
706
  - app/views/users/_profile_fields.html.erb
646
707
  - app/views/users/_term.html.erb
647
708
  - app/views/users/_user_form.html.erb
709
+ - app/views/users/certificates.html.erb
710
+ - app/views/users/discussions.html.erb
648
711
  - app/views/users/edit.html.erb
712
+ - app/views/users/messages.html.erb
649
713
  - app/views/users/show.html.erb
650
714
  - app/views/users/terms.html.erb
651
715
  - config/i18n-tasks.yml
@@ -693,6 +757,7 @@ files:
693
757
  - spec/api_helper.rb
694
758
  - spec/capybara_helper.rb
695
759
  - spec/controllers/api_clients_controller.rb
760
+ - spec/controllers/certificates_controller_spec.rb
696
761
  - spec/controllers/chapters_controller_spec.rb
697
762
  - spec/controllers/confirmations_controller_spec.rb
698
763
  - spec/controllers/courses_api_controller_spec.rb
@@ -755,6 +820,7 @@ files:
755
820
  - spec/dummy/public/error/timeout_3.svg
756
821
  - spec/dummy/public/medal/outline.svg
757
822
  - spec/evaluation_helper.rb
823
+ - spec/features/certificate_programs_flow_spec.rb
758
824
  - spec/features/chapters_flow_spec.rb
759
825
  - spec/features/complements_flow_spec.rb
760
826
  - spec/features/disable_user_flow_spec.rb
@@ -786,6 +852,7 @@ files:
786
852
  - spec/helpers/authors_helper_spec.rb
787
853
  - spec/helpers/avatar_helper_spec.rb
788
854
  - spec/helpers/breadcrumbs_helper_spec.rb
855
+ - spec/helpers/certificate_helper_spec.rb
789
856
  - spec/helpers/email_helper_spec.rb
790
857
  - spec/helpers/exercise_input_helper_spec.rb
791
858
  - spec/helpers/icons_helper_spec.rb
@@ -810,6 +877,7 @@ files:
810
877
  - spec/javascripts/sync-mode-spec.js
811
878
  - spec/javascripts/timeout-spec.js
812
879
  - spec/javascripts/timer-spec.js
880
+ - spec/javascripts/upload-spec.js
813
881
  - spec/login_helper.rb
814
882
  - spec/mailers/previews/user_mailer_preview.rb
815
883
  - spec/mailers/user_mailer_spec.rb
@@ -859,7 +927,7 @@ homepage: https://mumuki.io
859
927
  licenses:
860
928
  - AGPL-3.0
861
929
  metadata: {}
862
- post_install_message:
930
+ post_install_message:
863
931
  rdoc_options: []
864
932
  require_paths:
865
933
  - lib
@@ -874,9 +942,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
874
942
  - !ruby/object:Gem::Version
875
943
  version: '0'
876
944
  requirements: []
877
- rubyforge_project:
945
+ rubyforge_project:
878
946
  rubygems_version: 2.7.6
879
- signing_key:
947
+ signing_key:
880
948
  specification_version: 4
881
949
  summary: Code assement web application for the Mumuki Platform.
882
950
  test_files:
@@ -894,6 +962,7 @@ test_files:
894
962
  - spec/controllers/discussions_messages_controller_spec.rb
895
963
  - spec/controllers/users_api_controller_spec.rb
896
964
  - spec/controllers/chapters_controller_spec.rb
965
+ - spec/controllers/certificates_controller_spec.rb
897
966
  - spec/controllers/organizations_api_controller_spec.rb
898
967
  - spec/controllers/users_controller_spec.rb
899
968
  - spec/evaluation_helper.rb
@@ -953,6 +1022,7 @@ test_files:
953
1022
  - spec/features/not_found_public_flow_spec.rb
954
1023
  - spec/features/home_private_flow_spec.rb
955
1024
  - spec/features/login_flow_spec.rb
1025
+ - spec/features/certificate_programs_flow_spec.rb
956
1026
  - spec/features/links_flow_spec.rb
957
1027
  - spec/features/complements_flow_spec.rb
958
1028
  - spec/features/notifications_flow_spec.rb
@@ -987,6 +1057,7 @@ test_files:
987
1057
  - spec/javascripts/editors-spec.js
988
1058
  - spec/javascripts/exercise-spec.js
989
1059
  - spec/javascripts/elipsis-spec.js
1060
+ - spec/javascripts/upload-spec.js
990
1061
  - spec/javascripts/spec-helper.js
991
1062
  - spec/javascripts/submissions-store-spec.js
992
1063
  - spec/javascripts/gamification-spec.js
@@ -999,6 +1070,7 @@ test_files:
999
1070
  - spec/helpers/page_title_helper_spec.rb
1000
1071
  - spec/helpers/with_navigation_spec.rb
1001
1072
  - spec/helpers/authors_helper_spec.rb
1073
+ - spec/helpers/certificate_helper_spec.rb
1002
1074
  - spec/helpers/email_helper_spec.rb
1003
1075
  - spec/helpers/with_choices_spec.rb
1004
1076
  - spec/helpers/avatar_helper_spec.rb