From 9776c4adf8be8a4abee760f8a68adc7b8867fcc2 Mon Sep 17 00:00:00 2001 From: afgmlff Date: Sat, 24 Oct 2020 17:56:18 -0300 Subject: [PATCH 01/36] add aditional files to cucumber/capybara bdd --- cucumber.yaml | 6 ++++++ features/support/env.rb | 9 +++++++++ features/support/hooks.rb | 41 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 56 insertions(+) create mode 100644 cucumber.yaml create mode 100644 features/support/hooks.rb diff --git a/cucumber.yaml b/cucumber.yaml new file mode 100644 index 00000000..2a5fdc5d --- /dev/null +++ b/cucumber.yaml @@ -0,0 +1,6 @@ +--- +default: -p html -p bdd -p json +html: --format html --out=features.html +dot: --format progress +bdd: --format pretty +json: --format json -o "report.json" diff --git a/features/support/env.rb b/features/support/env.rb index 003fb131..c6d5a72e 100644 --- a/features/support/env.rb +++ b/features/support/env.rb @@ -4,7 +4,16 @@ # instead of editing this one. Cucumber will automatically load all features/**/*.rb # files. +require 'capybara' +require 'capybara/cucumber' require 'cucumber/rails' +require 'report_builder' + + +Capybara.configure do |config| + config.default_driver = :selenium_chrome #roda no navegador + #config.default_driver = :selenium_chrome_headless #roda com o nageador em background +end # frozen_string_literal: true diff --git a/features/support/hooks.rb b/features/support/hooks.rb new file mode 100644 index 00000000..37784b19 --- /dev/null +++ b/features/support/hooks.rb @@ -0,0 +1,41 @@ +After do |scenario| + add_screenshot(scenario) + + if scenario.failed? + add_browser_logs + end + end + + def add_screenshot(scenario) + nome_cenario = scenario.name.gsub(/[^A-Za-z0-9]/, '') + nome_cenario = nome_cenario.gsub(' ','_').downcase! + screenshot = "log/screenshots/#{nome_cenario}.png" + page.save_screenshot(screenshot) + embed(screenshot, 'image/png', 'Print maroto :)') + end + + def add_browser_logs + time_now = Time.now + # Getting current URL + current_url = Capybara.current_url.to_s + # Gather browser logs + logs = page.driver.browser.manage.logs.get(:browser).map {|line| [line.level, line.message]} + # Remove warnings and info messages + logs.reject! { |line| ['WARNING', 'INFO'].include?(line.first) } + logs.any? == true + embed(time_now.strftime('%Y-%m-%d-%H-%M-%S' + "\n") + ( "Current URL: " + current_url + "\n") + logs.join("\n"), 'text/plain', 'BROWSER ERROR') +end + +at_exit do + time = Time.now.getutc + ReportBuilder.configure do |config| + config.json_path = 'report.json' + config.report_path = 'cucumber_web_report' + config.report_types = [:html] + config.report_tabs = %w[Overview Features Scenarios Errors] + config.report_title = 'Cucumber Report Builder web automation test results' + config.compress_images = false + config.additional_info = { 'Project name' => 'Test', 'Platform' => 'Integration', 'Report generated' => time } + end + ReportBuilder.build_report +end From 3dcac425d31e9e74e0011ebcdddfe63c09ae738e Mon Sep 17 00:00:00 2001 From: afgmlff Date: Fri, 30 Oct 2020 18:27:53 -0300 Subject: [PATCH 02/36] add .feature and _steps.rb for EngSwCIC#19 ('Definir prazo de credenciamento') --- features/credenciamento_periodo.feature | 23 +++++++++++++++++ .../credenciamento_periodo_steps.rb | 25 +++++++++++++++++++ 2 files changed, 48 insertions(+) create mode 100644 features/credenciamento_periodo.feature create mode 100644 features/step_definitions/credenciamento_periodo_steps.rb diff --git a/features/credenciamento_periodo.feature b/features/credenciamento_periodo.feature new file mode 100644 index 00000000..8738c2bb --- /dev/null +++ b/features/credenciamento_periodo.feature @@ -0,0 +1,23 @@ +#language: pt +#encoding: utf-8 + +Funcionalidade: Definir o prazo de credenciamento dos professores + Como um administrador, + para que eu possa credenciar os professores, + eu gostaria de definir o prazo de credenciamento dos professores + + Contexto: + Dado que eu esteja autenticado como usuario "admin" + E que esteja na pagina inicial + + Cenário: Definir prazo de credenciamento sem data + Quando eu aperto o botão "Definir prazo de credenciamento" + E eu aperto o botão "Salvar período" + Então eu espero ver a mensagem "Insira uma data de início e uma data de término válidas." + + Cenário: Definir prazo de credenciamento com data + Quando eu aperto o botão "Definir prazo de credenciamento" + Quando eu adiciono um valor para "Data de Início" + E adiciono um valor para "Data de Término" + E eu aperto o botão "Salvar período" + Então eu espero ver a mensagem "Prazo cadastrado com sucesso." \ No newline at end of file diff --git a/features/step_definitions/credenciamento_periodo_steps.rb b/features/step_definitions/credenciamento_periodo_steps.rb new file mode 100644 index 00000000..d4aa724a --- /dev/null +++ b/features/step_definitions/credenciamento_periodo_steps.rb @@ -0,0 +1,25 @@ +Dado("Dado que eu esteja autenticado como usuario {string}") do |string| + User.create(full_name: string, email: 'admin1@admin.unb.br', password: 'password', + registration_number: "123456789", role: 1 + ) + visit new_user_session_path + fill_in :user_email, with: 'admin1@admin.unb.br' + fill_in :user_password, with: 'password' + click_button "Log in" +end + +Dado('que esteja na página de credenciamento') do |page_credenciamento| + pending #visit path_to(page_credenciamento) +end + +Quando('eu aperto o botão {string}') do |string| + pending #click_button(string) +end + +Então('eu espero ver a mensagem {string}') do |string| + @expected_message = string +end + +Quando('eu adiciono um valor {string} para {string2}') do |string, string2| + fill_in(string2, :with => string) +end \ No newline at end of file From 2c5737bbc827d1af09f40d6b0ca0cf6604b6f61b Mon Sep 17 00:00:00 2001 From: afgmlff Date: Fri, 30 Oct 2020 19:08:58 -0300 Subject: [PATCH 03/36] commented pending functions --- features/credenciamento_periodo.feature | 6 +++--- features/step_definitions/credenciamento_periodo_steps.rb | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/features/credenciamento_periodo.feature b/features/credenciamento_periodo.feature index 8738c2bb..bc113ceb 100644 --- a/features/credenciamento_periodo.feature +++ b/features/credenciamento_periodo.feature @@ -8,7 +8,7 @@ Funcionalidade: Definir o prazo de credenciamento dos professores Contexto: Dado que eu esteja autenticado como usuario "admin" - E que esteja na pagina inicial + E que esteja na página de credenciamento Cenário: Definir prazo de credenciamento sem data Quando eu aperto o botão "Definir prazo de credenciamento" @@ -17,7 +17,7 @@ Funcionalidade: Definir o prazo de credenciamento dos professores Cenário: Definir prazo de credenciamento com data Quando eu aperto o botão "Definir prazo de credenciamento" - Quando eu adiciono um valor para "Data de Início" - E adiciono um valor para "Data de Término" + Quando eu adiciono um valor "Início" para "Data de Início" + E eu adiciono um valor "Término" para "Data de Término" E eu aperto o botão "Salvar período" Então eu espero ver a mensagem "Prazo cadastrado com sucesso." \ No newline at end of file diff --git a/features/step_definitions/credenciamento_periodo_steps.rb b/features/step_definitions/credenciamento_periodo_steps.rb index d4aa724a..ff5881b4 100644 --- a/features/step_definitions/credenciamento_periodo_steps.rb +++ b/features/step_definitions/credenciamento_periodo_steps.rb @@ -17,9 +17,9 @@ end Então('eu espero ver a mensagem {string}') do |string| - @expected_message = string + pending #@expected_message = string end Quando('eu adiciono um valor {string} para {string2}') do |string, string2| - fill_in(string2, :with => string) + pending #fill_in(string2, :with => string) end \ No newline at end of file From 063684523a4fb0320fe1302d84dba665eb1368d3 Mon Sep 17 00:00:00 2001 From: Gabriel Preihs Date: Fri, 30 Oct 2020 19:16:46 -0300 Subject: [PATCH 04/36] Beginning #20 issue, feature and steps EngSwCIC#20 --- features/requisitos_necessarios.feature | 22 +++++++++++++ .../requisitos_necessarios.rb | 32 +++++++++++++++++++ 2 files changed, 54 insertions(+) create mode 100644 features/requisitos_necessarios.feature create mode 100644 features/step_definitions/requisitos_necessarios.rb diff --git a/features/requisitos_necessarios.feature b/features/requisitos_necessarios.feature new file mode 100644 index 00000000..90199605 --- /dev/null +++ b/features/requisitos_necessarios.feature @@ -0,0 +1,22 @@ +#language: pt +#encoding: utf-8 + +Funcionalidade: Disponibilizar os requisitos necessarios para credenciamento de professores + Como administrador autenticado no sistema, + Quero poder disponibilizar para os professores os requisitos necessários para o credenciamento + Para que eles possam dar procedimento ao credenciamento + + Contexto: + Dado que eu esteja logado como administrador de email "gp@admin.com" e senha "123" + E não existem requisitos selecionados na página principal + Quando o administrador clicou no link para alterar documentos necessários para credenciamento + + Cenário: Os campos puderam ser selecionados + Quando eu selecionar os campos + E eu clicar no botão atualizar requisitos + Então eu devo voltar para a página principal aonde aparece meus requisitos selecionados + + Cenário: Não houveram mudanças feitas + Quando eu não selecionar os campos + E eu clicar no botão atualizar requisitos + Então eu recebo uma mensagem dizendo que "não houveram mudanças" diff --git a/features/step_definitions/requisitos_necessarios.rb b/features/step_definitions/requisitos_necessarios.rb new file mode 100644 index 00000000..39edcc34 --- /dev/null +++ b/features/step_definitions/requisitos_necessarios.rb @@ -0,0 +1,32 @@ +Dado("que eu esteja logado como administrador de email {string} e senha {string}") do |email, senha| + User.create(username: 'admin', email: email, password: senha, + registration: "123456789", is_admin: true + ) + visit new_user_session_path + fill_in :user_email, with: email + fill_in :user_password, with: senha + click_button "Log in" +end + +Quando("o administrador clicou no link para alterar documentos necessários para credenciamento") do + pending visit alterar_requisitos_path +end + +Quando("eu selecionar os campos") do + # select = page.find('select#select_id') + # select.select 'Opção 1' + # select.select 'Opção 2' + # select.select 'Opção 3' +end + +E("eu clicar no botão atualizar requisitos") do + pending click_button "atualizar requisitos" +end + +Então("eu devo voltar para a página principal aonde aparece meus requisitos selecionados") do + pending page.hasText('opções atuais: Option 1, Option 2, Option 3'); +end + +Então("eu recebo uma mensagem dizendo que {string}") do |string| + pending @expected_message = string +end From 158d03ec5a3414f4ab0316b39230d4301fb4f093 Mon Sep 17 00:00:00 2001 From: Lucas Miranda Date: Fri, 30 Oct 2020 19:22:00 -0300 Subject: [PATCH 05/36] add abrir_solicitacao_credenciamento.feature and abrir_solicitacao_credenciamento.rb for EngSwCIC#21 --- .DS_Store | Bin 0 -> 10244 bytes features/.DS_Store | Bin 0 -> 6148 bytes .../abrir_solicitacao_credenciamento.feature | 29 ++++++++++++++++++ .../abrir_solicitacao_credenciamento.rb | 28 +++++++++++++++++ spec/.DS_Store | Bin 0 -> 6148 bytes 5 files changed, 57 insertions(+) create mode 100644 .DS_Store create mode 100644 features/.DS_Store create mode 100644 features/abrir_solicitacao_credenciamento.feature create mode 100644 features/step_definitions/abrir_solicitacao_credenciamento.rb create mode 100644 spec/.DS_Store diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..3bbd03ac03275dd7f1e6984a26d68f4e41bda99a GIT binary patch literal 10244 zcmeI1ziSjh6vyA(9r4hB5$tSMP*4joC}J92!$~BKN@|1N4^Qzfd*tq{?+>t0+hAkF zKOlBmL~K$^z*=ktv9r|go0;8x?=~B-Q3Eru`!@65oA=r8{>sb|ky#wK=ZPXBs$*k2 zH;dgKjs3h8TE+J)!5ZXKuRFieO8SFBWatPA1Ojcx4h#9905z|KwqU~A~M4aakQ02_H5dpmI!9yH@pVO^^6Qw-zM(I5G^ z*xQM-E}e{@d>CKZ_!)|^)iHi#!^yVC{R>@=k7H+PhEOMBQ<|NcV%1p`bneF z>?KX~)lctkE!}zZ@w)c6_w^4RinW1Dc8Q=$_h~=_Rh2Hj!>HaPYp!n4(`eJy%)EKU zqF2?cL>LsKHgT3~y58(4_sDuzw@qHp=Jk`jUeT-S;k3|Zs6`2_(F0WN>Z%)Gr~R__ zukV$#wi-hcl*K3x^Mg4m)TU;8*y=Ttq?dJQpraqsKnXHDRZT(cAQE8OrwUWdb?P|v z4leSD#8N!%qpTrZ`U@6v#WH}YVK z^{t&@`8)|z^lAkA`Qp5Ux~W(pQi{NGIGlTf#ty_3u7tJV)F72C_NVV<#ChX6CeJ++Rf zu}dAP*OW_xaqe`o#JhW~mcAgS#*vWaQ5w}&s{s_R3Vl(tPK{^WC(0*Cu-7j$uq;<1 z?d8`n5z|xw)2D&d%XdkT%Ib;td9cLT`n>Zh`)b*tBt+3G5h|Ns7-5EQwd`*j1U%fFoe{|4Mdpdze?)dDj zCGhQ^96Y|CKffHci%VB=uWyHgvzBqi?Rt*<^3x7TSb~BAOTMQ?eHDB7t899#=X`bA zeXvhH=Z$gZ?lZ&fUiEw|=cA$wCG{pIi$ZUsI4-f3@8ID26%t4P{t@=CFr*f zH2w+z?7{2>eg8QHv}^!I0V_dRAVxxg5^BN~!$>&nHuyyWD?te-<7dV=VP+FFK8p9DUSPM}0Y(8UL0BOAA>e7yMj7~320j3*2xa5| literal 0 HcmV?d00001 diff --git a/features/abrir_solicitacao_credenciamento.feature b/features/abrir_solicitacao_credenciamento.feature new file mode 100644 index 00000000..910d270f --- /dev/null +++ b/features/abrir_solicitacao_credenciamento.feature @@ -0,0 +1,29 @@ +#language: pt +#encoding: utf-8 + +Funcionalidade: Solicitar credenciamento + Como professor autenticado no sistema, + Quero poder solicitar meu credenciamento + Para que eu possa ser um professor credenciado + + Contexto: + Dado que eu esteja cadastrado como usuário "prof1@user.com" + E que esteja logado + E que esteja na página de credenciamento + E esteja pendente de credenciamento + + Cenário: Solicitacao enviada com sucesso + Quando eu preencher o número do processo SEI + E clicar no botão "Solicitar credenciamento" + Então é enviado à administração uma solicitação de credenciamento + E aparece uma mensagem de confirmação + + Cenário: Solicitacao não enviada - erro no número do processo + Quando eu preencher com um número qualquer + E clicar no botão "Solicitar credenciamento" + Então a mensagem de erro "Número inválido" + + Cenário: Solicitação não enviada - campo em branco + Quando eu não preencher o campo do número do processo SEI + E clicar no botão "Solicitar credenciamento" + Então a mensagem de erro "Campo obrigatório em branco" \ No newline at end of file diff --git a/features/step_definitions/abrir_solicitacao_credenciamento.rb b/features/step_definitions/abrir_solicitacao_credenciamento.rb new file mode 100644 index 00000000..77684bad --- /dev/null +++ b/features/step_definitions/abrir_solicitacao_credenciamento.rb @@ -0,0 +1,28 @@ +Dado("que eu esteja logado como professor com o email {string} e a senha {string}") do |string, string2| + User.create(username: 'professor123', email: string, password: string2, course: "CIC", is_admin: false) + visit new_user_session_path + click_button "Entrar" + fill_in :user_email, with: string + fill_in :user_password, with: string2 + click_button "Log in" +end + +Dado("que eu esteja na pagina {string}") do |string| + pending #expect(current_path).to eq("/#{string}") +end + +Dado("que exista a pendencia de credenciamento no sistema com o botao {string)") do |button| + pending #page.should have_button("Solicitar credenciamento") +end + +Entao("preencho o campo de processo SEI {string}") do |string| + pending #fill_in :processo_sei, with: string + +E("clico no botao {string}") do |button| + pending #click_button "Solicitar credenciamento" +end + +E("espero ver a mensagem de confirmacao {string}") do |string| + pending #@expected_message = string +end + diff --git a/spec/.DS_Store b/spec/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..b6ed53366a752c6b9b2382716925585a7df52cce GIT binary patch literal 6148 zcmeHKJx;?g82wBGRCKAt!sv~;HwaZYK`(&XAV5lR)$$`TWnn?R1tW(*;wWrffSLE% zCbgRci2;Pr_f_^wK0n(pPqJMTks4p;BcdS@^-&m;Jyb2h?OYnM_5C_D8zvck1-2u(8ZZGKyt9HG9m-%v5OpPh9w7V$9*=RB|<=lVOYd5nrSvD=q z6pa4rt+&#TFGpXo^KY={=b;MT%4nC)u?ZD4w_DLN)~TMFj8NbGd#!I{oYJgyb+cOZ z>`)17bE~N~mW4(Qu}r$#Y!5{adda7W(HNn`E>4TUZMvZg$h)OTUXb1p_W*H0Ybfpc zu$C4v*50)rTqfjB)(T%HL3wogH~?>7-JJQi}uP zKOKkmN&$DQO&91sWol>;itCfOLDZ|$MIRKQBF`em{&QpT~PVs*go)4 de1KvDZJHl|smID8G6?x2U~P~}9QaiSJ^(JSpveFL literal 0 HcmV?d00001 From 8c005a948fdb911c748394ce759182c0404d1d9f Mon Sep 17 00:00:00 2001 From: ngsylar Date: Fri, 30 Oct 2020 19:27:41 -0300 Subject: [PATCH 06/36] add .feature EngSwCIC#23 issue --- ...enciar-solicitacoes-credenciamento.feature | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 features/gerenciar-solicitacoes-credenciamento.feature diff --git a/features/gerenciar-solicitacoes-credenciamento.feature b/features/gerenciar-solicitacoes-credenciamento.feature new file mode 100644 index 00000000..6c8daeb5 --- /dev/null +++ b/features/gerenciar-solicitacoes-credenciamento.feature @@ -0,0 +1,37 @@ +#language: pt +#encoding: utf-8 + +Funcionalidade: Gerenciar solicitações de credenciamento + Como um admnistrador do sistema + Quero visualizar uma solicitação de credencimento em aberto + Para decidir se vou aceitar ou recusar tal solicitação + + Contexto: + Dado que os seguintes solicitações estejam pendentes: + | title | due_date | activity_type_id | + | Solicitação 1 | 02-Jan-2021 | 1 | + | Solicitação 2 | 02-Jan-2021 | 1 | + | Solicitação 3 | 02-Jan-2021 | 1 | + | Solicitação 4 | 02-Jan-2021 | 1 | + + E que eu estou cadastrado como "Gabriel", "gabriel@admin.com", "gabriel123", 1, "200000000" + E que eu estou logado + E que eu estou na página de solicitações de credenciamento + + Cenário: Aceitar uma solicitação de credenciamento + Quando eu clico em "Solicitação 1" + Então eu devo estar na página da "Solicitação 1" + Quando eu clico em "Aceitar" + Então eu devo estar na página de solicitações de credenciamento + E eu não devo ver "Solicitação 1" + Quando eu clico em "Solicitações aceitas" + Então eu devo ver "Solicitação 1" + + Cenário: Recusar uma solicitação de credenciamento + Quando eu clico em "Solicitação 2" + Então eu devo estar na página da "Solicitação 2" + Quando eu clico em "Recusar" + Então eu devo estar na página de solicitações de credenciamento + E eu não devo ver "Solicitação 2" + Quando eu clico em "Solicitações aceitas" + Então eu não devo ver "Solicitação 2" From 550d623eca531d5eee780acb9192f6a21262354e Mon Sep 17 00:00:00 2001 From: ngsylar Date: Fri, 30 Oct 2020 20:06:46 -0300 Subject: [PATCH 07/36] add steps issue EngSwCIC#23 --- ...nciar_solicitacoes_credenciamento.feature} | 0 ...nciar_solicitacoes_credenciamento_steps.rb | 51 +++++++++++++++++++ 2 files changed, 51 insertions(+) rename features/{gerenciar-solicitacoes-credenciamento.feature => gerenciar_solicitacoes_credenciamento.feature} (100%) create mode 100644 features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb diff --git a/features/gerenciar-solicitacoes-credenciamento.feature b/features/gerenciar_solicitacoes_credenciamento.feature similarity index 100% rename from features/gerenciar-solicitacoes-credenciamento.feature rename to features/gerenciar_solicitacoes_credenciamento.feature diff --git a/features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb b/features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb new file mode 100644 index 00000000..7f536f7c --- /dev/null +++ b/features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb @@ -0,0 +1,51 @@ +Dado "que os seguintes solicitações estejam pendentes:" do |table| + pending +# table.hashes.each do |row| +# Activity.create!(row) +# end +end + +Dado /^que eu estou cadastrado como (.*)$/ do |values| + pending +# values.split(/,[ ]*/).each do |value| +# end +end + +Dado /^que eu estou logado como (.*)$/ do |values| + pending +# values.split(/,[]*/) +# fill_in("Email", :with => values[0]) +# fill_in("Password", :with => values[1]) +# click_button("Log in") +end + +Quando /^eu clico em "([^"]*)"$/ do |link| + pending +# click_link(link) +end + +Então /^eu devo ver "([^"]*)"$/ do |text| + pending +# if page.respond_to? :should +# page.should have_content(text) +# else +# assert page.has_content?(text) +# end +end + +Então /^eu não devo ver "([^"]*)"$/ do |text| + pending +# if page.respond_to? :should +# page.should have_no_content(text) +# else +# assert page.has_no_content?(text) +# end +end + +Dado /^que estou na página de (.+)$/ do |page_name| + visit path_to(page_name) +end + +Então /^eu devo estar na página (.+)$/ + pending +end From 349dcfb714b6f4aa20f833eba3998fcbb5940a1c Mon Sep 17 00:00:00 2001 From: Gabriel Preihs Date: Fri, 30 Oct 2020 20:08:50 -0300 Subject: [PATCH 08/36] Fixing name --- ...{requisitos_necessarios.rb => requisitos_necessarios_steps.rb} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename features/step_definitions/{requisitos_necessarios.rb => requisitos_necessarios_steps.rb} (100%) diff --git a/features/step_definitions/requisitos_necessarios.rb b/features/step_definitions/requisitos_necessarios_steps.rb similarity index 100% rename from features/step_definitions/requisitos_necessarios.rb rename to features/step_definitions/requisitos_necessarios_steps.rb From 3e64d6e54f46fade9c34bce6fc9a29e30e4396df Mon Sep 17 00:00:00 2001 From: ngsylar Date: Mon, 9 Nov 2020 20:34:35 -0300 Subject: [PATCH 09/36] Cucumber and new steps --- .tool-versions | 1 + Gemfile | 4 +- Gemfile.lock | 6 + features.html | 485 ++++++++++++++++++ .../abrir_solicitacao_credenciamento.feature | 29 -- features/credenciamento_periodo.feature | 23 - ...enciar_solicitacoes_credenciamento.feature | 2 +- features/requisitos_necessarios.feature | 22 - features/spike.feature | 6 + .../abrir_solicitacao_credenciamento.rb | 28 - .../credenciamento_periodo_steps.rb | 25 - ...nciar_solicitacoes_credenciamento_steps.rb | 80 +-- .../requisitos_necessarios_steps.rb | 32 -- features/step_definitions/web_steps.rb | 254 +++++++++ features/support/env.rb | 9 - features/support/hooks.rb | 2 +- features/support/paths.rb | 38 ++ features/support/selectors.rb | 44 ++ report.json | 1 + spike.rb | 16 + 20 files changed, 905 insertions(+), 202 deletions(-) create mode 100644 .tool-versions create mode 100644 features.html delete mode 100644 features/abrir_solicitacao_credenciamento.feature delete mode 100644 features/credenciamento_periodo.feature delete mode 100644 features/requisitos_necessarios.feature create mode 100644 features/spike.feature delete mode 100644 features/step_definitions/abrir_solicitacao_credenciamento.rb delete mode 100644 features/step_definitions/credenciamento_periodo_steps.rb delete mode 100644 features/step_definitions/requisitos_necessarios_steps.rb create mode 100644 features/step_definitions/web_steps.rb create mode 100644 features/support/paths.rb create mode 100644 features/support/selectors.rb create mode 100644 report.json create mode 100644 spike.rb diff --git a/.tool-versions b/.tool-versions new file mode 100644 index 00000000..7f44804c --- /dev/null +++ b/.tool-versions @@ -0,0 +1 @@ +ruby 2.6.3 diff --git a/Gemfile b/Gemfile index 54be0f4e..d347e85b 100644 --- a/Gemfile +++ b/Gemfile @@ -56,13 +56,15 @@ end group :test do # Adds support for Capybara system testing and selenium driver - gem 'capybara', '>= 2.15' gem 'selenium-webdriver' # Easy installation and use of chromedriver to run system tests with Chrome gem 'webdrivers' gem 'cucumber-rails', require: false + gem 'cucumber-rails-training-wheels' # some pre-fabbed step definitions # database_cleaner is not required, but highly recommended gem 'database_cleaner' + gem 'capybara', '>= 2.15' + gem 'launchy' # a useful debugging aid for user stories gem 'shoulda-matchers' end diff --git a/Gemfile.lock b/Gemfile.lock index 0a9e4f86..b6223e46 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -90,6 +90,8 @@ GEM mime-types (>= 2.0, < 4) nokogiri (~> 1.8) railties (>= 4.2, < 7) + cucumber-rails-training-wheels (1.0.0) + cucumber-rails (>= 1.1.1) cucumber-tag_expressions (1.1.1) cucumber-wire (0.0.1) database_cleaner (1.7.0) @@ -110,6 +112,8 @@ GEM concurrent-ruby (~> 1.0) jbuilder (2.9.1) activesupport (>= 4.2.0) + launchy (2.5.0) + addressable (~> 2.7) listen (3.1.5) rb-fsevent (~> 0.9, >= 0.9.4) rb-inotify (~> 0.9, >= 0.9.7) @@ -256,9 +260,11 @@ DEPENDENCIES capybara (>= 2.15) coffee-rails (~> 4.2) cucumber-rails + cucumber-rails-training-wheels database_cleaner devise jbuilder (~> 2.5) + launchy listen (>= 3.0.5, < 3.2) pg (>= 0.18, < 2.0) puma (~> 3.12) diff --git a/features.html b/features.html new file mode 100644 index 00000000..45392229 --- /dev/null +++ b/features.html @@ -0,0 +1,485 @@ +Cucumber

Cucumber Features

Expand All

Collapse All

# language: pt
#encoding: utf-8

Funcionalidade: Gerenciar solicitações de credenciamento

Como um admnistrador do sistema
Quero visualizar uma solicitação de credencimento em aberto
Para decidir se vou aceitar ou recusar tal solicitação

Contexto

  1. Dado que os seguintes solicitações estejam pendentes:
    features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:31
    title
    due_date
    activity_type_id
    Solicitação 1
    02-Jan-2021
    1
    Solicitação 2
    02-Jan-2021
    1
    Solicitação 3
    02-Jan-2021
    1
    Solicitação 4
    02-Jan-2021
    1
    TODO (Cucumber::Pending)
    ./features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:32:in `"que os seguintes solicitações estejam pendentes:"'
    +features/gerenciar_solicitacoes_credenciamento.feature:10:in `Dado que os seguintes solicitações estejam pendentes:'
    30
    +31Dado "que os seguintes solicitações estejam pendentes:" do |table|
    +32    pending
    
    +33    # table.hashes.each do |row|
    +34    #     Activity.create!(row)
    +35# gem install syntax to get syntax highlighting
  2. E que eu estou cadastrado como "Gabriel", "gabriel@admin.com", "gabriel123", 1, "200000000"
    features/gerenciar_solicitacoes_credenciamento.feature:17
    Dado("que eu estou cadastrado como {string}, {string}, {string}, {int}, {string}") do |string, string2, string3, int, string4|
    +  pending # Write code here that turns the phrase above into concrete actions
    +end
  3. E que eu estou logado
    features/gerenciar_solicitacoes_credenciamento.feature:18
    Dado("que eu estou logado") do
    +  pending # Write code here that turns the phrase above into concrete actions
    +end
  4. E que eu estou na página de solicitações de credenciamento
    features/gerenciar_solicitacoes_credenciamento.feature:19
    Dado("que eu estou na página de solicitações de credenciamento") do
    +  pending # Write code here that turns the phrase above into concrete actions
    +end
features/gerenciar_solicitacoes_credenciamento.feature:21

Cenário: Aceitar uma solicitação de credenciamento

  1. Quando eu clico em "Solicitação 1"
    features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:38
  2. Então eu devo estar na página da "Solicitação 1"
    features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:62
  3. Quando eu clico em "Aceitar"
    features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:38
  4. Então eu devo estar na página de solicitações de credenciamento
    features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:62
  5. E eu não devo ver "Solicitação 1"
    features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:50
  6. Quando eu clico em "Solicitações aceitas"
    features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:38
  7. Então eu devo ver "Solicitação 1"
    features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:42
  8. Print maroto :)
      +
features/gerenciar_solicitacoes_credenciamento.feature:30

Cenário: Recusar uma solicitação de credenciamento

  1. Quando eu clico em "Solicitação 2"
    features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:38
  2. Então eu devo estar na página da "Solicitação 2"
    features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:62
  3. Quando eu clico em "Recusar"
    features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:38
  4. Então eu devo estar na página de solicitações de credenciamento
    features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:62
  5. E eu não devo ver "Solicitação 2"
    features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:50
  6. Quando eu clico em "Solicitações aceitas"
    features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:38
  7. Então eu não devo ver "Solicitação 2"
    features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:50
  8. Print maroto :)
      +
# language: pt
#encoding: utf-8

Funcionalidade: Testar

features/spike.feature:5

Cenário:

  1. Dado que eu estou cadastrado e logado como "Gabriel", "gabriel@admin.com", "gabriel123", 1, "200000000"
    features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:1
  2. Print maroto :)
      +
\ No newline at end of file diff --git a/features/abrir_solicitacao_credenciamento.feature b/features/abrir_solicitacao_credenciamento.feature deleted file mode 100644 index 910d270f..00000000 --- a/features/abrir_solicitacao_credenciamento.feature +++ /dev/null @@ -1,29 +0,0 @@ -#language: pt -#encoding: utf-8 - -Funcionalidade: Solicitar credenciamento - Como professor autenticado no sistema, - Quero poder solicitar meu credenciamento - Para que eu possa ser um professor credenciado - - Contexto: - Dado que eu esteja cadastrado como usuário "prof1@user.com" - E que esteja logado - E que esteja na página de credenciamento - E esteja pendente de credenciamento - - Cenário: Solicitacao enviada com sucesso - Quando eu preencher o número do processo SEI - E clicar no botão "Solicitar credenciamento" - Então é enviado à administração uma solicitação de credenciamento - E aparece uma mensagem de confirmação - - Cenário: Solicitacao não enviada - erro no número do processo - Quando eu preencher com um número qualquer - E clicar no botão "Solicitar credenciamento" - Então a mensagem de erro "Número inválido" - - Cenário: Solicitação não enviada - campo em branco - Quando eu não preencher o campo do número do processo SEI - E clicar no botão "Solicitar credenciamento" - Então a mensagem de erro "Campo obrigatório em branco" \ No newline at end of file diff --git a/features/credenciamento_periodo.feature b/features/credenciamento_periodo.feature deleted file mode 100644 index bc113ceb..00000000 --- a/features/credenciamento_periodo.feature +++ /dev/null @@ -1,23 +0,0 @@ -#language: pt -#encoding: utf-8 - -Funcionalidade: Definir o prazo de credenciamento dos professores - Como um administrador, - para que eu possa credenciar os professores, - eu gostaria de definir o prazo de credenciamento dos professores - - Contexto: - Dado que eu esteja autenticado como usuario "admin" - E que esteja na página de credenciamento - - Cenário: Definir prazo de credenciamento sem data - Quando eu aperto o botão "Definir prazo de credenciamento" - E eu aperto o botão "Salvar período" - Então eu espero ver a mensagem "Insira uma data de início e uma data de término válidas." - - Cenário: Definir prazo de credenciamento com data - Quando eu aperto o botão "Definir prazo de credenciamento" - Quando eu adiciono um valor "Início" para "Data de Início" - E eu adiciono um valor "Término" para "Data de Término" - E eu aperto o botão "Salvar período" - Então eu espero ver a mensagem "Prazo cadastrado com sucesso." \ No newline at end of file diff --git a/features/gerenciar_solicitacoes_credenciamento.feature b/features/gerenciar_solicitacoes_credenciamento.feature index 6c8daeb5..c002a5c1 100644 --- a/features/gerenciar_solicitacoes_credenciamento.feature +++ b/features/gerenciar_solicitacoes_credenciamento.feature @@ -14,7 +14,7 @@ Funcionalidade: Gerenciar solicitações de credenciamento | Solicitação 3 | 02-Jan-2021 | 1 | | Solicitação 4 | 02-Jan-2021 | 1 | - E que eu estou cadastrado como "Gabriel", "gabriel@admin.com", "gabriel123", 1, "200000000" + E que eu estou cadastrado como "Gabriel", "gabriel@admin.com", "gabriel123", "administrador", "200000000" E que eu estou logado E que eu estou na página de solicitações de credenciamento diff --git a/features/requisitos_necessarios.feature b/features/requisitos_necessarios.feature deleted file mode 100644 index 90199605..00000000 --- a/features/requisitos_necessarios.feature +++ /dev/null @@ -1,22 +0,0 @@ -#language: pt -#encoding: utf-8 - -Funcionalidade: Disponibilizar os requisitos necessarios para credenciamento de professores - Como administrador autenticado no sistema, - Quero poder disponibilizar para os professores os requisitos necessários para o credenciamento - Para que eles possam dar procedimento ao credenciamento - - Contexto: - Dado que eu esteja logado como administrador de email "gp@admin.com" e senha "123" - E não existem requisitos selecionados na página principal - Quando o administrador clicou no link para alterar documentos necessários para credenciamento - - Cenário: Os campos puderam ser selecionados - Quando eu selecionar os campos - E eu clicar no botão atualizar requisitos - Então eu devo voltar para a página principal aonde aparece meus requisitos selecionados - - Cenário: Não houveram mudanças feitas - Quando eu não selecionar os campos - E eu clicar no botão atualizar requisitos - Então eu recebo uma mensagem dizendo que "não houveram mudanças" diff --git a/features/spike.feature b/features/spike.feature new file mode 100644 index 00000000..eef30006 --- /dev/null +++ b/features/spike.feature @@ -0,0 +1,6 @@ +#language: pt +#encoding: utf-8 + +Funcionalidade: Testar + Cenário: + Dado que eu estou cadastrado e logado como "Gabriel", "gabriel@admin.com", "gabriel123", 1, "200000000" diff --git a/features/step_definitions/abrir_solicitacao_credenciamento.rb b/features/step_definitions/abrir_solicitacao_credenciamento.rb deleted file mode 100644 index 77684bad..00000000 --- a/features/step_definitions/abrir_solicitacao_credenciamento.rb +++ /dev/null @@ -1,28 +0,0 @@ -Dado("que eu esteja logado como professor com o email {string} e a senha {string}") do |string, string2| - User.create(username: 'professor123', email: string, password: string2, course: "CIC", is_admin: false) - visit new_user_session_path - click_button "Entrar" - fill_in :user_email, with: string - fill_in :user_password, with: string2 - click_button "Log in" -end - -Dado("que eu esteja na pagina {string}") do |string| - pending #expect(current_path).to eq("/#{string}") -end - -Dado("que exista a pendencia de credenciamento no sistema com o botao {string)") do |button| - pending #page.should have_button("Solicitar credenciamento") -end - -Entao("preencho o campo de processo SEI {string}") do |string| - pending #fill_in :processo_sei, with: string - -E("clico no botao {string}") do |button| - pending #click_button "Solicitar credenciamento" -end - -E("espero ver a mensagem de confirmacao {string}") do |string| - pending #@expected_message = string -end - diff --git a/features/step_definitions/credenciamento_periodo_steps.rb b/features/step_definitions/credenciamento_periodo_steps.rb deleted file mode 100644 index ff5881b4..00000000 --- a/features/step_definitions/credenciamento_periodo_steps.rb +++ /dev/null @@ -1,25 +0,0 @@ -Dado("Dado que eu esteja autenticado como usuario {string}") do |string| - User.create(full_name: string, email: 'admin1@admin.unb.br', password: 'password', - registration_number: "123456789", role: 1 - ) - visit new_user_session_path - fill_in :user_email, with: 'admin1@admin.unb.br' - fill_in :user_password, with: 'password' - click_button "Log in" -end - -Dado('que esteja na página de credenciamento') do |page_credenciamento| - pending #visit path_to(page_credenciamento) -end - -Quando('eu aperto o botão {string}') do |string| - pending #click_button(string) -end - -Então('eu espero ver a mensagem {string}') do |string| - pending #@expected_message = string -end - -Quando('eu adiciono um valor {string} para {string2}') do |string, string2| - pending #fill_in(string2, :with => string) -end \ No newline at end of file diff --git a/features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb b/features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb index 7f536f7c..1d006ed3 100644 --- a/features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb +++ b/features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb @@ -1,51 +1,69 @@ -Dado "que os seguintes solicitações estejam pendentes:" do |table| - pending -# table.hashes.each do |row| -# Activity.create!(row) -# end +Dado /^que eu estou cadastrado e logado como (.*)$/ do |input| + columns = [:full_name, :email, :password, :role, :registration] + + values = input.split(/,\s?/) + values.each_with_index do |value, i| + if /"([^"]*)"/ === value + value.gsub!(/"/,'') + else + values[i] = value.to_i + end + end + + record = Hash[columns.zip(values)] + User.create!(record) + + steps %( + Dado que eu estou logado como "#{record[:email]}", "#{record[:password]}" + ) end -Dado /^que eu estou cadastrado como (.*)$/ do |values| - pending -# values.split(/,[ ]*/).each do |value| -# end +Dado /^que eu estou logado como (.*)$/ do |input| + fields = ['email', 'password'] + values = Hash[fields.zip input.gsub!(/"/,'').split(/,\s?/)] + + visit new_user_session_path + fill_in("Email", :with => values['email']) + fill_in("Password", :with => values['password']) + click_button("Log in") end -Dado /^que eu estou logado como (.*)$/ do |values| +Dado "que os seguintes solicitações estejam pendentes:" do |table| pending -# values.split(/,[]*/) -# fill_in("Email", :with => values[0]) -# fill_in("Password", :with => values[1]) -# click_button("Log in") + # table.hashes.each do |row| + # Activity.create!(row) + # end end Quando /^eu clico em "([^"]*)"$/ do |link| - pending -# click_link(link) + click_link(link) end Então /^eu devo ver "([^"]*)"$/ do |text| - pending -# if page.respond_to? :should -# page.should have_content(text) -# else -# assert page.has_content?(text) -# end + if page.respond_to? :should + page.should have_content(text) + else + assert page.has_content?(text) + end end Então /^eu não devo ver "([^"]*)"$/ do |text| - pending -# if page.respond_to? :should -# page.should have_no_content(text) -# else -# assert page.has_no_content?(text) -# end + if page.respond_to? :should + page.should have_no_content(text) + else + assert page.has_no_content?(text) + end end -Dado /^que estou na página de (.+)$/ do |page_name| +Dado /^que estou na página (.+)$/ do |page_name| visit path_to(page_name) end -Então /^eu devo estar na página (.+)$/ - pending +Então /^eu devo estar na página (.+)$/ do |page_name| + current_path = URI.parse(current_url).path + if current_path.respond_to? :should + current_path.should == path_to(page_name) + else + assert_equal path_to(page_name), current_path + end end diff --git a/features/step_definitions/requisitos_necessarios_steps.rb b/features/step_definitions/requisitos_necessarios_steps.rb deleted file mode 100644 index 39edcc34..00000000 --- a/features/step_definitions/requisitos_necessarios_steps.rb +++ /dev/null @@ -1,32 +0,0 @@ -Dado("que eu esteja logado como administrador de email {string} e senha {string}") do |email, senha| - User.create(username: 'admin', email: email, password: senha, - registration: "123456789", is_admin: true - ) - visit new_user_session_path - fill_in :user_email, with: email - fill_in :user_password, with: senha - click_button "Log in" -end - -Quando("o administrador clicou no link para alterar documentos necessários para credenciamento") do - pending visit alterar_requisitos_path -end - -Quando("eu selecionar os campos") do - # select = page.find('select#select_id') - # select.select 'Opção 1' - # select.select 'Opção 2' - # select.select 'Opção 3' -end - -E("eu clicar no botão atualizar requisitos") do - pending click_button "atualizar requisitos" -end - -Então("eu devo voltar para a página principal aonde aparece meus requisitos selecionados") do - pending page.hasText('opções atuais: Option 1, Option 2, Option 3'); -end - -Então("eu recebo uma mensagem dizendo que {string}") do |string| - pending @expected_message = string -end diff --git a/features/step_definitions/web_steps.rb b/features/step_definitions/web_steps.rb new file mode 100644 index 00000000..94c2db84 --- /dev/null +++ b/features/step_definitions/web_steps.rb @@ -0,0 +1,254 @@ +# TL;DR: YOU SHOULD DELETE THIS FILE +# +# This file was generated by Cucumber-Rails and is only here to get you a head start +# These step definitions are thin wrappers around the Capybara/Webrat API that lets you +# visit pages, interact with widgets and make assertions about page content. +# +# If you use these step definitions as basis for your features you will quickly end up +# with features that are: +# +# * Hard to maintain +# * Verbose to read +# +# A much better approach is to write your own higher level step definitions, following +# the advice in the following blog posts: +# +# * http://benmabey.com/2008/05/19/imperative-vs-declarative-scenarios-in-user-stories.html +# * http://dannorth.net/2011/01/31/whose-domain-is-it-anyway/ +# * http://elabs.se/blog/15-you-re-cuking-it-wrong +# + + +require 'uri' +require 'cgi' +require File.expand_path(File.join(File.dirname(__FILE__), "..", "support", "paths")) +require File.expand_path(File.join(File.dirname(__FILE__), "..", "support", "selectors")) + +module WithinHelpers + def with_scope(locator) + locator ? within(*selector_for(locator)) { yield } : yield + end +end +World(WithinHelpers) + +# # Single-line step scoper +# When /^(.*) within (.*[^:])$/ do |step, parent| +# with_scope(parent) { When step } +# end + +# # Multi-line step scoper +# When /^(.*) within (.*[^:]):$/ do |step, parent, table_or_string| +# with_scope(parent) { When "#{step}:", table_or_string } +# end + +# Given /^(?:|I )am on (.+)$/ do |page_name| +# visit path_to(page_name) +# end + +# When /^(?:|I )go to (.+)$/ do |page_name| +# visit path_to(page_name) +# end + +# When /^(?:|I )press "([^"]*)"$/ do |button| +# click_button(button) +# end + +# When /^(?:|I )follow "([^"]*)"$/ do |link| +# click_link(link) +# end + +# When /^(?:|I )fill in "([^"]*)" with "([^"]*)"$/ do |field, value| +# fill_in(field, :with => value) +# end + +# When /^(?:|I )fill in "([^"]*)" for "([^"]*)"$/ do |value, field| +# fill_in(field, :with => value) +# end + +# # Use this to fill in an entire form with data from a table. Example: +# # +# # When I fill in the following: +# # | Account Number | 5002 | +# # | Expiry date | 2009-11-01 | +# # | Note | Nice guy | +# # | Wants Email? | | +# # +# # TODO: Add support for checkbox, select or option +# # based on naming conventions. +# # +# When /^(?:|I )fill in the following:$/ do |fields| +# fields.rows_hash.each do |name, value| +# When %{I fill in "#{name}" with "#{value}"} +# end +# end + +# When /^(?:|I )select "([^"]*)" from "([^"]*)"$/ do |value, field| +# select(value, :from => field) +# end + +# When /^(?:|I )check "([^"]*)"$/ do |field| +# check(field) +# end + +# When /^(?:|I )uncheck "([^"]*)"$/ do |field| +# uncheck(field) +# end + +# When /^(?:|I )choose "([^"]*)"$/ do |field| +# choose(field) +# end + +# When /^(?:|I )attach the file "([^"]*)" to "([^"]*)"$/ do |path, field| +# attach_file(field, File.expand_path(path)) +# end + +# Then /^(?:|I )should see "([^"]*)"$/ do |text| +# if page.respond_to? :should +# page.should have_content(text) +# else +# assert page.has_content?(text) +# end +# end + +# Then /^(?:|I )should see \/([^\/]*)\/$/ do |regexp| +# regexp = Regexp.new(regexp) + +# if page.respond_to? :should +# page.should have_xpath('//*', :text => regexp) +# else +# assert page.has_xpath?('//*', :text => regexp) +# end +# end + +# Then /^(?:|I )should not see "([^"]*)"$/ do |text| +# if page.respond_to? :should +# page.should have_no_content(text) +# else +# assert page.has_no_content?(text) +# end +# end + +# Then /^(?:|I )should not see \/([^\/]*)\/$/ do |regexp| +# regexp = Regexp.new(regexp) + +# if page.respond_to? :should +# page.should have_no_xpath('//*', :text => regexp) +# else +# assert page.has_no_xpath?('//*', :text => regexp) +# end +# end + +# Then /^the "([^"]*)" field(?: within (.*))? should contain "([^"]*)"$/ do |field, parent, value| +# with_scope(parent) do +# field = find_field(field) +# field_value = (field.tag_name == 'textarea') ? field.text : field.value +# if field_value.respond_to? :should +# field_value.should =~ /#{value}/ +# else +# assert_match(/#{value}/, field_value) +# end +# end +# end + +# Then /^the "([^"]*)" field(?: within (.*))? should not contain "([^"]*)"$/ do |field, parent, value| +# with_scope(parent) do +# field = find_field(field) +# field_value = (field.tag_name == 'textarea') ? field.text : field.value +# if field_value.respond_to? :should_not +# field_value.should_not =~ /#{value}/ +# else +# assert_no_match(/#{value}/, field_value) +# end +# end +# end + +# Then /^the "([^"]*)" field should have the error "([^"]*)"$/ do |field, error_message| +# element = find_field(field) +# classes = element.find(:xpath, '..')[:class].split(' ') + +# form_for_input = element.find(:xpath, 'ancestor::form[1]') +# using_formtastic = form_for_input[:class].include?('formtastic') +# error_class = using_formtastic ? 'error' : 'field_with_errors' + +# if classes.respond_to? :should +# classes.should include(error_class) +# else +# assert classes.include?(error_class) +# end + +# if page.respond_to?(:should) +# if using_formtastic +# error_paragraph = element.find(:xpath, '../*[@class="inline-errors"][1]') +# error_paragraph.should have_content(error_message) +# else +# page.should have_content("#{field.titlecase} #{error_message}") +# end +# else +# if using_formtastic +# error_paragraph = element.find(:xpath, '../*[@class="inline-errors"][1]') +# assert error_paragraph.has_content?(error_message) +# else +# assert page.has_content?("#{field.titlecase} #{error_message}") +# end +# end +# end + +# Then /^the "([^"]*)" field should have no error$/ do |field| +# element = find_field(field) +# classes = element.find(:xpath, '..')[:class].split(' ') +# if classes.respond_to? :should +# classes.should_not include('field_with_errors') +# classes.should_not include('error') +# else +# assert !classes.include?('field_with_errors') +# assert !classes.include?('error') +# end +# end + +# Then /^the "([^"]*)" checkbox(?: within (.*))? should be checked$/ do |label, parent| +# with_scope(parent) do +# field_checked = find_field(label)['checked'] +# if field_checked.respond_to? :should +# field_checked.should be_true +# else +# assert field_checked +# end +# end +# end + +# Then /^the "([^"]*)" checkbox(?: within (.*))? should not be checked$/ do |label, parent| +# with_scope(parent) do +# field_checked = find_field(label)['checked'] +# if field_checked.respond_to? :should +# field_checked.should be_false +# else +# assert !field_checked +# end +# end +# end + +# Then /^(?:|I )should be on (.+)$/ do |page_name| +# current_path = URI.parse(current_url).path +# if current_path.respond_to? :should +# current_path.should == path_to(page_name) +# else +# assert_equal path_to(page_name), current_path +# end +# end + +# Then /^(?:|I )should have the following query string:$/ do |expected_pairs| +# query = URI.parse(current_url).query +# actual_params = query ? CGI.parse(query) : {} +# expected_params = {} +# expected_pairs.rows_hash.each_pair{|k,v| expected_params[k] = v.split(',')} + +# if actual_params.respond_to? :should +# actual_params.should == expected_params +# else +# assert_equal expected_params, actual_params +# end +# end + +# Then /^show me the page$/ do +# save_and_open_page +# end diff --git a/features/support/env.rb b/features/support/env.rb index c6d5a72e..003fb131 100644 --- a/features/support/env.rb +++ b/features/support/env.rb @@ -4,16 +4,7 @@ # instead of editing this one. Cucumber will automatically load all features/**/*.rb # files. -require 'capybara' -require 'capybara/cucumber' require 'cucumber/rails' -require 'report_builder' - - -Capybara.configure do |config| - config.default_driver = :selenium_chrome #roda no navegador - #config.default_driver = :selenium_chrome_headless #roda com o nageador em background -end # frozen_string_literal: true diff --git a/features/support/hooks.rb b/features/support/hooks.rb index 37784b19..6049864c 100644 --- a/features/support/hooks.rb +++ b/features/support/hooks.rb @@ -10,7 +10,7 @@ def add_screenshot(scenario) nome_cenario = scenario.name.gsub(/[^A-Za-z0-9]/, '') nome_cenario = nome_cenario.gsub(' ','_').downcase! screenshot = "log/screenshots/#{nome_cenario}.png" - page.save_screenshot(screenshot) + # page.save_screenshot(screenshot) embed(screenshot, 'image/png', 'Print maroto :)') end diff --git a/features/support/paths.rb b/features/support/paths.rb new file mode 100644 index 00000000..290543c3 --- /dev/null +++ b/features/support/paths.rb @@ -0,0 +1,38 @@ +# TL;DR: YOU SHOULD DELETE THIS FILE +# +# This file is used by web_steps.rb, which you should also delete +# +# You have been warned +module NavigationHelpers + # Maps a name to a path. Used by the + # + # When /^I go to (.+)$/ do |page_name| + # + # step definition in web_steps.rb + # + def path_to(page_name) + case page_name + + when /^the home\s?page$/ + '/' + + # Add more mappings here. + # Here is an example that pulls values out of the Regexp: + # + # when /^(.*)'s profile page$/i + # user_profile_path(User.find_by_login($1)) + + else + begin + page_name =~ /^the (.*) page$/ + path_components = $1.split(/\s+/) + self.send(path_components.push('path').join('_').to_sym) + rescue NoMethodError, ArgumentError + raise "Can't find mapping from \"#{page_name}\" to a path.\n" + + "Now, go and add a mapping in #{__FILE__}" + end + end + end +end + +World(NavigationHelpers) diff --git a/features/support/selectors.rb b/features/support/selectors.rb new file mode 100644 index 00000000..33bebc1d --- /dev/null +++ b/features/support/selectors.rb @@ -0,0 +1,44 @@ +# TL;DR: YOU SHOULD DELETE THIS FILE +# +# This file is used by web_steps.rb, which you should also delete +# +# You have been warned +module HtmlSelectorsHelpers + # Maps a name to a selector. Used primarily by the + # + # When /^(.+) within (.+)$/ do |step, scope| + # + # step definitions in web_steps.rb + # + def selector_for(locator) + case locator + + when "the page" + "html > body" + + # Add more mappings here. + # Here is an example that pulls values out of the Regexp: + # + # when /^the (notice|error|info) flash$/ + # ".flash.#{$1}" + + # You can also return an array to use a different selector + # type, like: + # + # when /the header/ + # [:xpath, "//header"] + + # This allows you to provide a quoted selector as the scope + # for "within" steps as was previously the default for the + # web steps: + when /^"(.+)"$/ + $1 + + else + raise "Can't find mapping from \"#{locator}\" to a selector.\n" + + "Now, go and add a mapping in #{__FILE__}" + end + end +end + +World(HtmlSelectorsHelpers) diff --git a/report.json b/report.json new file mode 100644 index 00000000..e33767b0 --- /dev/null +++ b/report.json @@ -0,0 +1 @@ +[{"uri":"features/gerenciar_solicitacoes_credenciamento.feature","id":"gerenciar-solicitações-de-credenciamento","keyword":"Funcionalidade","name":"Gerenciar solicitações de credenciamento","description":" Como um admnistrador do sistema\n Quero visualizar uma solicitação de credencimento em aberto\n Para decidir se vou aceitar ou recusar tal solicitação","line":4,"comments":[{"value":"#encoding: utf-8","line":2}],"elements":[{"keyword":"Contexto","name":"","description":"","line":9,"type":"background","before":[{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:14"},"result":{"status":"passed","duration":25500}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:22"},"result":{"status":"passed","duration":16600}}],"steps":[{"keyword":"Dado ","name":"que os seguintes solicitações estejam pendentes:","line":10,"rows":[{"cells":["title","due_date","activity_type_id"]},{"cells":["Solicitação 1","02-Jan-2021","1"]},{"cells":["Solicitação 2","02-Jan-2021","1"]},{"cells":["Solicitação 3","02-Jan-2021","1"]},{"cells":["Solicitação 4","02-Jan-2021","1"]}],"match":{"location":"features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:31"},"result":{"status":"pending","error_message":"TODO (Cucumber::Pending)\n./features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:32:in `\"que os seguintes solicitações estejam pendentes:\"'\nfeatures/gerenciar_solicitacoes_credenciamento.feature:10:in `Dado que os seguintes solicitações estejam pendentes:'","duration":311000}},{"keyword":"E ","name":"que eu estou cadastrado como \"Gabriel\", \"gabriel@admin.com\", \"gabriel123\", 1, \"200000000\"","line":17,"match":{"location":"features/gerenciar_solicitacoes_credenciamento.feature:17"},"result":{"status":"undefined"}},{"keyword":"E ","name":"que eu estou logado","line":18,"match":{"location":"features/gerenciar_solicitacoes_credenciamento.feature:18"},"result":{"status":"undefined"}},{"keyword":"E ","name":"que eu estou na página de solicitações de credenciamento","line":19,"match":{"location":"features/gerenciar_solicitacoes_credenciamento.feature:19"},"result":{"status":"undefined"}}]},{"id":"gerenciar-solicitações-de-credenciamento;aceitar-uma-solicitação-de-credenciamento","keyword":"Cenário","name":"Aceitar uma solicitação de credenciamento","description":"","line":21,"type":"scenario","steps":[{"keyword":"Quando ","name":"eu clico em \"Solicitação 1\"","line":22,"match":{"location":"features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:38"},"result":{"status":"skipped"}},{"keyword":"Então ","name":"eu devo estar na página da \"Solicitação 1\"","line":23,"match":{"location":"features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:62"},"result":{"status":"skipped"}},{"keyword":"Quando ","name":"eu clico em \"Aceitar\"","line":24,"match":{"location":"features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:38"},"result":{"status":"skipped"}},{"keyword":"Então ","name":"eu devo estar na página de solicitações de credenciamento","line":25,"match":{"location":"features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:62"},"result":{"status":"skipped"}},{"keyword":"E ","name":"eu não devo ver \"Solicitação 1\"","line":26,"match":{"location":"features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:50"},"result":{"status":"skipped"}},{"keyword":"Quando ","name":"eu clico em \"Solicitações aceitas\"","line":27,"match":{"location":"features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:38"},"result":{"status":"skipped"}},{"keyword":"Então ","name":"eu devo ver \"Solicitação 1\"","line":28,"match":{"location":"features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:42"},"result":{"status":"skipped"}}],"after":[{"embeddings":[{"mime_type":"image/png","data":"bG9nL3NjcmVlbnNob3RzL2FjZWl0YXJ1bWFzb2xpY2l0YW9kZWNyZWRlbmNpYW1lbnRvLnBuZw=="}],"match":{"location":"features/support/hooks.rb:1"},"result":{"status":"passed","duration":242200}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:10"},"result":{"status":"passed","duration":18400}}]},{"keyword":"Contexto","name":"","description":"","line":9,"type":"background","before":[{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:14"},"result":{"status":"passed","duration":11400}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:22"},"result":{"status":"passed","duration":45600}}],"steps":[{"keyword":"Dado ","name":"que os seguintes solicitações estejam pendentes:","line":10,"rows":[{"cells":["title","due_date","activity_type_id"]},{"cells":["Solicitação 1","02-Jan-2021","1"]},{"cells":["Solicitação 2","02-Jan-2021","1"]},{"cells":["Solicitação 3","02-Jan-2021","1"]},{"cells":["Solicitação 4","02-Jan-2021","1"]}],"match":{"location":"features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:31"},"result":{"status":"pending","error_message":"TODO (Cucumber::Pending)\n./features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:32:in `\"que os seguintes solicitações estejam pendentes:\"'\nfeatures/gerenciar_solicitacoes_credenciamento.feature:10:in `Dado que os seguintes solicitações estejam pendentes:'","duration":173000}},{"keyword":"E ","name":"que eu estou cadastrado como \"Gabriel\", \"gabriel@admin.com\", \"gabriel123\", 1, \"200000000\"","line":17,"match":{"location":"features/gerenciar_solicitacoes_credenciamento.feature:17"},"result":{"status":"undefined"}},{"keyword":"E ","name":"que eu estou logado","line":18,"match":{"location":"features/gerenciar_solicitacoes_credenciamento.feature:18"},"result":{"status":"undefined"}},{"keyword":"E ","name":"que eu estou na página de solicitações de credenciamento","line":19,"match":{"location":"features/gerenciar_solicitacoes_credenciamento.feature:19"},"result":{"status":"undefined"}}]},{"id":"gerenciar-solicitações-de-credenciamento;recusar-uma-solicitação-de-credenciamento","keyword":"Cenário","name":"Recusar uma solicitação de credenciamento","description":"","line":30,"type":"scenario","steps":[{"keyword":"Quando ","name":"eu clico em \"Solicitação 2\"","line":31,"match":{"location":"features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:38"},"result":{"status":"skipped"}},{"keyword":"Então ","name":"eu devo estar na página da \"Solicitação 2\"","line":32,"match":{"location":"features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:62"},"result":{"status":"skipped"}},{"keyword":"Quando ","name":"eu clico em \"Recusar\"","line":33,"match":{"location":"features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:38"},"result":{"status":"skipped"}},{"keyword":"Então ","name":"eu devo estar na página de solicitações de credenciamento","line":34,"match":{"location":"features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:62"},"result":{"status":"skipped"}},{"keyword":"E ","name":"eu não devo ver \"Solicitação 2\"","line":35,"match":{"location":"features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:50"},"result":{"status":"skipped"}},{"keyword":"Quando ","name":"eu clico em \"Solicitações aceitas\"","line":36,"match":{"location":"features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:38"},"result":{"status":"skipped"}},{"keyword":"Então ","name":"eu não devo ver \"Solicitação 2\"","line":37,"match":{"location":"features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:50"},"result":{"status":"skipped"}}],"after":[{"embeddings":[{"mime_type":"image/png","data":"bG9nL3NjcmVlbnNob3RzL3JlY3VzYXJ1bWFzb2xpY2l0YW9kZWNyZWRlbmNpYW1lbnRvLnBuZw=="}],"match":{"location":"features/support/hooks.rb:1"},"result":{"status":"passed","duration":201700}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:10"},"result":{"status":"passed","duration":14900}}]}]},{"uri":"features/spike.feature","id":"testar","keyword":"Funcionalidade","name":"Testar","description":"","line":4,"comments":[{"value":"#encoding: utf-8","line":2}],"elements":[{"id":"testar;","keyword":"Cenário","name":"","description":"","line":5,"type":"scenario","before":[{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:14"},"result":{"status":"passed","duration":11200}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:22"},"result":{"status":"passed","duration":9100}}],"steps":[{"keyword":"Dado ","name":"que eu estou cadastrado e logado como \"Gabriel\", \"gabriel@admin.com\", \"gabriel123\", 1, \"200000000\"","line":6,"match":{"location":"features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:1"},"result":{"status":"passed","duration":4778577400}}],"after":[{"embeddings":[{"mime_type":"image/png","data":"bG9nL3NjcmVlbnNob3RzLy5wbmc="}],"match":{"location":"features/support/hooks.rb:1"},"result":{"status":"passed","duration":253000}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:10"},"result":{"status":"passed","duration":31900}}]}]}] \ No newline at end of file diff --git a/spike.rb b/spike.rb new file mode 100644 index 00000000..a5837c1e --- /dev/null +++ b/spike.rb @@ -0,0 +1,16 @@ +# frase = "\"Gabriel\", \"gabriel@admin.com\", \"gabriel123\", 1, \"200000000\"" +# values = frase.split(/,\s?/) +# values.each_with_index do |value, i| +# if /"([^"]*)"/ === value +# value.gsub!(/"/,'') +# else +# values[i] = value.to_i +# end +# end +# columns = [:full_name, :email, :password, :role, :registration] +# record = Hash[columns.zip(values)] +# p record + +# frase = "\"gabriel@admin.com\", \"gabriel123\"" +# values = frase.gsub!(/"/,'').split(/,\s?/) +# p values \ No newline at end of file From 03b583dbe6427de7e6c4f726e037cc6348ac51e8 Mon Sep 17 00:00:00 2001 From: ngsylar Date: Mon, 9 Nov 2020 22:25:04 -0300 Subject: [PATCH 10/36] rescue original features --- features.html | 33 ++++++---- .../abrir_solicitacao_credenciamento.feature | 29 ++++++++ features/credenciamento_periodo.feature | 23 +++++++ ...enciar_solicitacoes_credenciamento.feature | 33 +++++----- features/requisitos_necessarios.feature | 22 +++++++ features/spike.feature | 2 +- ...rb => credenciamento_professores_steps.rb} | 66 +++++++++++-------- report.json | 2 +- spike.rb | 2 +- 9 files changed, 151 insertions(+), 61 deletions(-) create mode 100644 features/abrir_solicitacao_credenciamento.feature create mode 100644 features/credenciamento_periodo.feature create mode 100644 features/requisitos_necessarios.feature rename features/step_definitions/{gerenciar_solicitacoes_credenciamento_steps.rb => credenciamento_professores_steps.rb} (67%) diff --git a/features.html b/features.html index 45392229..d4aef58d 100644 --- a/features.html +++ b/features.html @@ -467,19 +467,26 @@ function makeYellow(element_id) { $('#'+element_id).css('background', '#FAF834'); $('#'+element_id).css('color', '#000000'); -}

Cucumber Features

Expand All

Collapse All

# language: pt
#encoding: utf-8

Funcionalidade: Gerenciar solicitações de credenciamento

Como um admnistrador do sistema
Quero visualizar uma solicitação de credencimento em aberto
Para decidir se vou aceitar ou recusar tal solicitação

Contexto

  1. Dado que os seguintes solicitações estejam pendentes:
    features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:31
    title
    due_date
    activity_type_id
    Solicitação 1
    02-Jan-2021
    1
    Solicitação 2
    02-Jan-2021
    1
    Solicitação 3
    02-Jan-2021
    1
    Solicitação 4
    02-Jan-2021
    1
    TODO (Cucumber::Pending)
    ./features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:32:in `"que os seguintes solicitações estejam pendentes:"'
    -features/gerenciar_solicitacoes_credenciamento.feature:10:in `Dado que os seguintes solicitações estejam pendentes:'
    30
    -31Dado "que os seguintes solicitações estejam pendentes:" do |table|
    -32    pending
    
    -33    # table.hashes.each do |row|
    -34    #     Activity.create!(row)
    -35# gem install syntax to get syntax highlighting
  2. E que eu estou cadastrado como "Gabriel", "gabriel@admin.com", "gabriel123", 1, "200000000"
    features/gerenciar_solicitacoes_credenciamento.feature:17
    Dado("que eu estou cadastrado como {string}, {string}, {string}, {int}, {string}") do |string, string2, string3, int, string4|
    +}

    Cucumber Features

    Expand All

    Collapse All

    # language: pt
    #encoding: utf-8

    Funcionalidade: Gerenciar solicitações de credenciamento

    Como um admnistrador do sistema
    Quero visualizar uma solicitação de credencimento em aberto
    Para decidir se vou aceitar ou recusar tal solicitação

    Contexto

    1. Dado que os seguintes solicitações estejam pendentes:
      features/step_definitions/credenciamento_professores_steps.rb:1
      title
      due_date
      activity_type_id
      Solicitação 1
      02-Jan-2021
      Solicitação de credenciamento
      Solicitação 2
      02-Jan-2021
      Solicitação de credenciamento
      Solicitação 3
      02-Jan-2021
      Solicitação de credenciamento
      Solicitação 4
      02-Jan-2021
      Solicitação de credenciamento
      TODO (Cucumber::Pending)
      ./features/step_definitions/credenciamento_professores_steps.rb:2:in `"que os seguintes solicitações estejam pendentes:"'
      +features/gerenciar_solicitacoes_credenciamento.feature:10:in `Dado que os seguintes solicitações estejam pendentes:'
      0Dado "que os seguintes solicitações estejam pendentes:" do |table|
      +1    pending
      +2    # table.hashes.each do |row|
      
      +3    #     Activity.create!(row)
      +4# gem install syntax to get syntax highlighting
    2. E que eu estou cadastrado e logado como "Gabriel", "gabriel@admin.com", "gabriel123", "administrator", "200000000"
      features/step_definitions/credenciamento_professores_steps.rb:8
    3. E que eu estou na página de solicitações de credenciamento
      features/gerenciar_solicitacoes_credenciamento.feature:18
      Dado("que eu estou na página de solicitações de credenciamento") do
         pending # Write code here that turns the phrase above into concrete actions
      -end
    4. E que eu estou logado
      features/gerenciar_solicitacoes_credenciamento.feature:18
      Dado("que eu estou logado") do
      +end
    features/gerenciar_solicitacoes_credenciamento.feature:20

    Cenário: Aceitar uma solicitação de credenciamento

    1. Quando eu clico em "Solicitação 1"
      features/step_definitions/credenciamento_professores_steps.rb:34
    2. Então eu devo estar na página da "Solicitação 1"
      features/step_definitions/credenciamento_professores_steps.rb:38
    3. Quando eu clico em "Aprovar"
      features/step_definitions/credenciamento_professores_steps.rb:34
    4. Então eu devo estar na página de solicitações de credenciamento
      features/step_definitions/credenciamento_professores_steps.rb:38
    5. Quando eu desmarco os seguintes estados: Rejeitadas, Reformulação
      features/gerenciar_solicitacoes_credenciamento.feature:25
      Quando("eu desmarco os seguintes estados: Rejeitadas, Reformulação") do
         pending # Write code here that turns the phrase above into concrete actions
      -end
    6. E que eu estou na página de solicitações de credenciamento
      features/gerenciar_solicitacoes_credenciamento.feature:19
      Dado("que eu estou na página de solicitações de credenciamento") do
      +end
    7. E eu marco os seguintes estados: Aprovadas
      features/gerenciar_solicitacoes_credenciamento.feature:26
      Quando("eu marco os seguintes estados: Aprovadas") do
         pending # Write code here that turns the phrase above into concrete actions
      -end
    features/gerenciar_solicitacoes_credenciamento.feature:21

    Cenário: Aceitar uma solicitação de credenciamento

    1. Quando eu clico em "Solicitação 1"
      features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:38
    2. Então eu devo estar na página da "Solicitação 1"
      features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:62
    3. Quando eu clico em "Aceitar"
      features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:38
    4. Então eu devo estar na página de solicitações de credenciamento
      features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:62
    5. E eu não devo ver "Solicitação 1"
      features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:50
    6. Quando eu clico em "Solicitações aceitas"
      features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:38
    7. Então eu devo ver "Solicitação 1"
      features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:42
    8. Print maroto :)
        -
    features/gerenciar_solicitacoes_credenciamento.feature:30

    Cenário: Recusar uma solicitação de credenciamento

    1. Quando eu clico em "Solicitação 2"
      features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:38
    2. Então eu devo estar na página da "Solicitação 2"
      features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:62
    3. Quando eu clico em "Recusar"
      features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:38
    4. Então eu devo estar na página de solicitações de credenciamento
      features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:62
    5. E eu não devo ver "Solicitação 2"
      features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:50
    6. Quando eu clico em "Solicitações aceitas"
      features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:38
    7. Então eu não devo ver "Solicitação 2"
      features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:50
    8. Print maroto :)
        -
    # language: pt
    #encoding: utf-8

    Funcionalidade: Testar

    features/spike.feature:5

    Cenário:

    1. Dado que eu estou cadastrado e logado como "Gabriel", "gabriel@admin.com", "gabriel123", 1, "200000000"
      features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:1
    2. Print maroto :)
        -
    \ No newline at end of file +end
  3. E aperto 'Atualizar'
    features/gerenciar_solicitacoes_credenciamento.feature:27
    Quando("aperto {string}") do |string|
    +  pending # Write code here that turns the phrase above into concrete actions
    +end
  4. Então eu devo ver "Solicitação 1"
    features/step_definitions/credenciamento_professores_steps.rb:63
  5. Print maroto :)
      +
features/gerenciar_solicitacoes_credenciamento.feature:30

Cenário: Recusar uma solicitação de credenciamento

  1. Quando eu clico em "Solicitação 2"
    features/step_definitions/credenciamento_professores_steps.rb:34
  2. Então eu devo estar na página da "Solicitação 2"
    features/step_definitions/credenciamento_professores_steps.rb:38
  3. Quando eu clico em "Rejeitar"
    features/step_definitions/credenciamento_professores_steps.rb:34
  4. Então eu devo estar na página de solicitações de credenciamento
    features/step_definitions/credenciamento_professores_steps.rb:38
  5. Quando eu desmarco os seguintes estados: Aprovadas, Reformulação
    features/gerenciar_solicitacoes_credenciamento.feature:35
    Quando("eu desmarco os seguintes estados: Aprovadas, Reformulação") do
    +  pending # Write code here that turns the phrase above into concrete actions
    +end
  6. E eu marco os seguintes estados: Rejeitadas
    features/gerenciar_solicitacoes_credenciamento.feature:36
    Quando("eu marco os seguintes estados: Rejeitadas") do
    +  pending # Write code here that turns the phrase above into concrete actions
    +end
  7. E aperto 'Atualizar'
    features/gerenciar_solicitacoes_credenciamento.feature:37
    Quando("aperto {string}") do |string|
    +  pending # Write code here that turns the phrase above into concrete actions
    +end
  8. Então eu devo ver "Solicitação 2"
    features/step_definitions/credenciamento_professores_steps.rb:63
  9. Print maroto :)
      +
# language: pt
#encoding: utf-8

Funcionalidade: Testar

features/spike.feature:5

Cenário:

  1. Dado que eu estou cadastrado e logado como "Gabriel", "gabriel@admin.com", "gabriel123", "administrator", "200000000"
    features/step_definitions/credenciamento_professores_steps.rb:8
  2. Print maroto :)
      +
\ No newline at end of file diff --git a/features/abrir_solicitacao_credenciamento.feature b/features/abrir_solicitacao_credenciamento.feature new file mode 100644 index 00000000..910d270f --- /dev/null +++ b/features/abrir_solicitacao_credenciamento.feature @@ -0,0 +1,29 @@ +#language: pt +#encoding: utf-8 + +Funcionalidade: Solicitar credenciamento + Como professor autenticado no sistema, + Quero poder solicitar meu credenciamento + Para que eu possa ser um professor credenciado + + Contexto: + Dado que eu esteja cadastrado como usuário "prof1@user.com" + E que esteja logado + E que esteja na página de credenciamento + E esteja pendente de credenciamento + + Cenário: Solicitacao enviada com sucesso + Quando eu preencher o número do processo SEI + E clicar no botão "Solicitar credenciamento" + Então é enviado à administração uma solicitação de credenciamento + E aparece uma mensagem de confirmação + + Cenário: Solicitacao não enviada - erro no número do processo + Quando eu preencher com um número qualquer + E clicar no botão "Solicitar credenciamento" + Então a mensagem de erro "Número inválido" + + Cenário: Solicitação não enviada - campo em branco + Quando eu não preencher o campo do número do processo SEI + E clicar no botão "Solicitar credenciamento" + Então a mensagem de erro "Campo obrigatório em branco" \ No newline at end of file diff --git a/features/credenciamento_periodo.feature b/features/credenciamento_periodo.feature new file mode 100644 index 00000000..bc113ceb --- /dev/null +++ b/features/credenciamento_periodo.feature @@ -0,0 +1,23 @@ +#language: pt +#encoding: utf-8 + +Funcionalidade: Definir o prazo de credenciamento dos professores + Como um administrador, + para que eu possa credenciar os professores, + eu gostaria de definir o prazo de credenciamento dos professores + + Contexto: + Dado que eu esteja autenticado como usuario "admin" + E que esteja na página de credenciamento + + Cenário: Definir prazo de credenciamento sem data + Quando eu aperto o botão "Definir prazo de credenciamento" + E eu aperto o botão "Salvar período" + Então eu espero ver a mensagem "Insira uma data de início e uma data de término válidas." + + Cenário: Definir prazo de credenciamento com data + Quando eu aperto o botão "Definir prazo de credenciamento" + Quando eu adiciono um valor "Início" para "Data de Início" + E eu adiciono um valor "Término" para "Data de Término" + E eu aperto o botão "Salvar período" + Então eu espero ver a mensagem "Prazo cadastrado com sucesso." \ No newline at end of file diff --git a/features/gerenciar_solicitacoes_credenciamento.feature b/features/gerenciar_solicitacoes_credenciamento.feature index c002a5c1..3598e10d 100644 --- a/features/gerenciar_solicitacoes_credenciamento.feature +++ b/features/gerenciar_solicitacoes_credenciamento.feature @@ -7,31 +7,32 @@ Funcionalidade: Gerenciar solicitações de credenciamento Para decidir se vou aceitar ou recusar tal solicitação Contexto: - Dado que os seguintes solicitações estejam pendentes: - | title | due_date | activity_type_id | - | Solicitação 1 | 02-Jan-2021 | 1 | - | Solicitação 2 | 02-Jan-2021 | 1 | - | Solicitação 3 | 02-Jan-2021 | 1 | - | Solicitação 4 | 02-Jan-2021 | 1 | - - E que eu estou cadastrado como "Gabriel", "gabriel@admin.com", "gabriel123", "administrador", "200000000" - E que eu estou logado + Dado que as seguintes solicitações estejam pendentes: + | title | due_date | activity_type_id | + | Solicitação 1 | 02-Jan-2021 | Solicitação de credenciamento | + | Solicitação 2 | 02-Jan-2021 | Solicitação de credenciamento | + | Solicitação 3 | 02-Jan-2021 | Solicitação de credenciamento | + | Solicitação 4 | 02-Jan-2021 | Solicitação de credenciamento | + + E que eu estou cadastrado e logado como "Gabriel", "gabriel@admin.com", "gabriel123", "administrator", "200000000" E que eu estou na página de solicitações de credenciamento Cenário: Aceitar uma solicitação de credenciamento Quando eu clico em "Solicitação 1" Então eu devo estar na página da "Solicitação 1" - Quando eu clico em "Aceitar" + Quando eu clico em "Aprovar" Então eu devo estar na página de solicitações de credenciamento - E eu não devo ver "Solicitação 1" - Quando eu clico em "Solicitações aceitas" + Quando eu desmarco os seguintes estados: Rejeitadas, Reformulação + E eu marco os seguintes estados: Aprovadas + E aperto 'Atualizar' Então eu devo ver "Solicitação 1" Cenário: Recusar uma solicitação de credenciamento Quando eu clico em "Solicitação 2" Então eu devo estar na página da "Solicitação 2" - Quando eu clico em "Recusar" + Quando eu clico em "Rejeitar" Então eu devo estar na página de solicitações de credenciamento - E eu não devo ver "Solicitação 2" - Quando eu clico em "Solicitações aceitas" - Então eu não devo ver "Solicitação 2" + Quando eu desmarco os seguintes estados: Aprovadas, Reformulação + E eu marco os seguintes estados: Rejeitadas + E aperto 'Atualizar' + Então eu devo ver "Solicitação 2" diff --git a/features/requisitos_necessarios.feature b/features/requisitos_necessarios.feature new file mode 100644 index 00000000..90199605 --- /dev/null +++ b/features/requisitos_necessarios.feature @@ -0,0 +1,22 @@ +#language: pt +#encoding: utf-8 + +Funcionalidade: Disponibilizar os requisitos necessarios para credenciamento de professores + Como administrador autenticado no sistema, + Quero poder disponibilizar para os professores os requisitos necessários para o credenciamento + Para que eles possam dar procedimento ao credenciamento + + Contexto: + Dado que eu esteja logado como administrador de email "gp@admin.com" e senha "123" + E não existem requisitos selecionados na página principal + Quando o administrador clicou no link para alterar documentos necessários para credenciamento + + Cenário: Os campos puderam ser selecionados + Quando eu selecionar os campos + E eu clicar no botão atualizar requisitos + Então eu devo voltar para a página principal aonde aparece meus requisitos selecionados + + Cenário: Não houveram mudanças feitas + Quando eu não selecionar os campos + E eu clicar no botão atualizar requisitos + Então eu recebo uma mensagem dizendo que "não houveram mudanças" diff --git a/features/spike.feature b/features/spike.feature index eef30006..c6d04b45 100644 --- a/features/spike.feature +++ b/features/spike.feature @@ -3,4 +3,4 @@ Funcionalidade: Testar Cenário: - Dado que eu estou cadastrado e logado como "Gabriel", "gabriel@admin.com", "gabriel123", 1, "200000000" + Dado que eu estou cadastrado e logado como "Gabriel", "gabriel@admin.com", "gabriel123", "administrator", "200000000" diff --git a/features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb b/features/step_definitions/credenciamento_professores_steps.rb similarity index 67% rename from features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb rename to features/step_definitions/credenciamento_professores_steps.rb index 1d006ed3..d9d6d856 100644 --- a/features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb +++ b/features/step_definitions/credenciamento_professores_steps.rb @@ -1,16 +1,15 @@ +Dado "que as seguintes solicitações estejam pendentes:" do |table| + pending + # table.hashes.each do |row| + # Activity.create!(row) + # end +end + Dado /^que eu estou cadastrado e logado como (.*)$/ do |input| - columns = [:full_name, :email, :password, :role, :registration] + user_props = [:full_name, :email, :password, :role, :registration] - values = input.split(/,\s?/) - values.each_with_index do |value, i| - if /"([^"]*)"/ === value - value.gsub!(/"/,'') - else - values[i] = value.to_i - end - end - - record = Hash[columns.zip(values)] + values = input.gsub!(/"/,'').split(/,\s?/) + record = Hash[user_props.zip(values)] User.create!(record) steps %( @@ -28,17 +27,39 @@ click_button("Log in") end -Dado "que os seguintes solicitações estejam pendentes:" do |table| - pending - # table.hashes.each do |row| - # Activity.create!(row) - # end +Dado /^que eu estou na página (.+)$/ do |page_name| + visit path_to(page_name) end Quando /^eu clico em "([^"]*)"$/ do |link| click_link(link) end +Então /^eu devo estar na página (.+)$/ do |page_name| + current_path = URI.parse(current_url).path + if current_path.respond_to? :should + current_path.should == path_to(page_name) + else + assert_equal path_to(page_name), current_path + end +end + +Quando /^eu marco os seguintes estados (.*)$/ do |statuses| + statuses.split(/,[ ]*/).each do |status| + check("statuses[#{status}]") + end +end + +Quando /^eu desmarco os seguintes estados (.*)$/ do |statuses| + statuses.split(/,[ ]*/).each do |status| + uncheck("statuses[#{status}]") + end +end + +Quando /^eu aperto '([^']*)'$/ do |button| + click_button(button) +end + Então /^eu devo ver "([^"]*)"$/ do |text| if page.respond_to? :should page.should have_content(text) @@ -54,16 +75,3 @@ assert page.has_no_content?(text) end end - -Dado /^que estou na página (.+)$/ do |page_name| - visit path_to(page_name) -end - -Então /^eu devo estar na página (.+)$/ do |page_name| - current_path = URI.parse(current_url).path - if current_path.respond_to? :should - current_path.should == path_to(page_name) - else - assert_equal path_to(page_name), current_path - end -end diff --git a/report.json b/report.json index e33767b0..d79596a6 100644 --- a/report.json +++ b/report.json @@ -1 +1 @@ -[{"uri":"features/gerenciar_solicitacoes_credenciamento.feature","id":"gerenciar-solicitações-de-credenciamento","keyword":"Funcionalidade","name":"Gerenciar solicitações de credenciamento","description":" Como um admnistrador do sistema\n Quero visualizar uma solicitação de credencimento em aberto\n Para decidir se vou aceitar ou recusar tal solicitação","line":4,"comments":[{"value":"#encoding: utf-8","line":2}],"elements":[{"keyword":"Contexto","name":"","description":"","line":9,"type":"background","before":[{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:14"},"result":{"status":"passed","duration":25500}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:22"},"result":{"status":"passed","duration":16600}}],"steps":[{"keyword":"Dado ","name":"que os seguintes solicitações estejam pendentes:","line":10,"rows":[{"cells":["title","due_date","activity_type_id"]},{"cells":["Solicitação 1","02-Jan-2021","1"]},{"cells":["Solicitação 2","02-Jan-2021","1"]},{"cells":["Solicitação 3","02-Jan-2021","1"]},{"cells":["Solicitação 4","02-Jan-2021","1"]}],"match":{"location":"features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:31"},"result":{"status":"pending","error_message":"TODO (Cucumber::Pending)\n./features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:32:in `\"que os seguintes solicitações estejam pendentes:\"'\nfeatures/gerenciar_solicitacoes_credenciamento.feature:10:in `Dado que os seguintes solicitações estejam pendentes:'","duration":311000}},{"keyword":"E ","name":"que eu estou cadastrado como \"Gabriel\", \"gabriel@admin.com\", \"gabriel123\", 1, \"200000000\"","line":17,"match":{"location":"features/gerenciar_solicitacoes_credenciamento.feature:17"},"result":{"status":"undefined"}},{"keyword":"E ","name":"que eu estou logado","line":18,"match":{"location":"features/gerenciar_solicitacoes_credenciamento.feature:18"},"result":{"status":"undefined"}},{"keyword":"E ","name":"que eu estou na página de solicitações de credenciamento","line":19,"match":{"location":"features/gerenciar_solicitacoes_credenciamento.feature:19"},"result":{"status":"undefined"}}]},{"id":"gerenciar-solicitações-de-credenciamento;aceitar-uma-solicitação-de-credenciamento","keyword":"Cenário","name":"Aceitar uma solicitação de credenciamento","description":"","line":21,"type":"scenario","steps":[{"keyword":"Quando ","name":"eu clico em \"Solicitação 1\"","line":22,"match":{"location":"features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:38"},"result":{"status":"skipped"}},{"keyword":"Então ","name":"eu devo estar na página da \"Solicitação 1\"","line":23,"match":{"location":"features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:62"},"result":{"status":"skipped"}},{"keyword":"Quando ","name":"eu clico em \"Aceitar\"","line":24,"match":{"location":"features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:38"},"result":{"status":"skipped"}},{"keyword":"Então ","name":"eu devo estar na página de solicitações de credenciamento","line":25,"match":{"location":"features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:62"},"result":{"status":"skipped"}},{"keyword":"E ","name":"eu não devo ver \"Solicitação 1\"","line":26,"match":{"location":"features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:50"},"result":{"status":"skipped"}},{"keyword":"Quando ","name":"eu clico em \"Solicitações aceitas\"","line":27,"match":{"location":"features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:38"},"result":{"status":"skipped"}},{"keyword":"Então ","name":"eu devo ver \"Solicitação 1\"","line":28,"match":{"location":"features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:42"},"result":{"status":"skipped"}}],"after":[{"embeddings":[{"mime_type":"image/png","data":"bG9nL3NjcmVlbnNob3RzL2FjZWl0YXJ1bWFzb2xpY2l0YW9kZWNyZWRlbmNpYW1lbnRvLnBuZw=="}],"match":{"location":"features/support/hooks.rb:1"},"result":{"status":"passed","duration":242200}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:10"},"result":{"status":"passed","duration":18400}}]},{"keyword":"Contexto","name":"","description":"","line":9,"type":"background","before":[{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:14"},"result":{"status":"passed","duration":11400}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:22"},"result":{"status":"passed","duration":45600}}],"steps":[{"keyword":"Dado ","name":"que os seguintes solicitações estejam pendentes:","line":10,"rows":[{"cells":["title","due_date","activity_type_id"]},{"cells":["Solicitação 1","02-Jan-2021","1"]},{"cells":["Solicitação 2","02-Jan-2021","1"]},{"cells":["Solicitação 3","02-Jan-2021","1"]},{"cells":["Solicitação 4","02-Jan-2021","1"]}],"match":{"location":"features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:31"},"result":{"status":"pending","error_message":"TODO (Cucumber::Pending)\n./features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:32:in `\"que os seguintes solicitações estejam pendentes:\"'\nfeatures/gerenciar_solicitacoes_credenciamento.feature:10:in `Dado que os seguintes solicitações estejam pendentes:'","duration":173000}},{"keyword":"E ","name":"que eu estou cadastrado como \"Gabriel\", \"gabriel@admin.com\", \"gabriel123\", 1, \"200000000\"","line":17,"match":{"location":"features/gerenciar_solicitacoes_credenciamento.feature:17"},"result":{"status":"undefined"}},{"keyword":"E ","name":"que eu estou logado","line":18,"match":{"location":"features/gerenciar_solicitacoes_credenciamento.feature:18"},"result":{"status":"undefined"}},{"keyword":"E ","name":"que eu estou na página de solicitações de credenciamento","line":19,"match":{"location":"features/gerenciar_solicitacoes_credenciamento.feature:19"},"result":{"status":"undefined"}}]},{"id":"gerenciar-solicitações-de-credenciamento;recusar-uma-solicitação-de-credenciamento","keyword":"Cenário","name":"Recusar uma solicitação de credenciamento","description":"","line":30,"type":"scenario","steps":[{"keyword":"Quando ","name":"eu clico em \"Solicitação 2\"","line":31,"match":{"location":"features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:38"},"result":{"status":"skipped"}},{"keyword":"Então ","name":"eu devo estar na página da \"Solicitação 2\"","line":32,"match":{"location":"features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:62"},"result":{"status":"skipped"}},{"keyword":"Quando ","name":"eu clico em \"Recusar\"","line":33,"match":{"location":"features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:38"},"result":{"status":"skipped"}},{"keyword":"Então ","name":"eu devo estar na página de solicitações de credenciamento","line":34,"match":{"location":"features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:62"},"result":{"status":"skipped"}},{"keyword":"E ","name":"eu não devo ver \"Solicitação 2\"","line":35,"match":{"location":"features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:50"},"result":{"status":"skipped"}},{"keyword":"Quando ","name":"eu clico em \"Solicitações aceitas\"","line":36,"match":{"location":"features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:38"},"result":{"status":"skipped"}},{"keyword":"Então ","name":"eu não devo ver \"Solicitação 2\"","line":37,"match":{"location":"features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:50"},"result":{"status":"skipped"}}],"after":[{"embeddings":[{"mime_type":"image/png","data":"bG9nL3NjcmVlbnNob3RzL3JlY3VzYXJ1bWFzb2xpY2l0YW9kZWNyZWRlbmNpYW1lbnRvLnBuZw=="}],"match":{"location":"features/support/hooks.rb:1"},"result":{"status":"passed","duration":201700}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:10"},"result":{"status":"passed","duration":14900}}]}]},{"uri":"features/spike.feature","id":"testar","keyword":"Funcionalidade","name":"Testar","description":"","line":4,"comments":[{"value":"#encoding: utf-8","line":2}],"elements":[{"id":"testar;","keyword":"Cenário","name":"","description":"","line":5,"type":"scenario","before":[{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:14"},"result":{"status":"passed","duration":11200}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:22"},"result":{"status":"passed","duration":9100}}],"steps":[{"keyword":"Dado ","name":"que eu estou cadastrado e logado como \"Gabriel\", \"gabriel@admin.com\", \"gabriel123\", 1, \"200000000\"","line":6,"match":{"location":"features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:1"},"result":{"status":"passed","duration":4778577400}}],"after":[{"embeddings":[{"mime_type":"image/png","data":"bG9nL3NjcmVlbnNob3RzLy5wbmc="}],"match":{"location":"features/support/hooks.rb:1"},"result":{"status":"passed","duration":253000}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:10"},"result":{"status":"passed","duration":31900}}]}]}] \ No newline at end of file +[{"uri":"features/gerenciar_solicitacoes_credenciamento.feature","id":"gerenciar-solicitações-de-credenciamento","keyword":"Funcionalidade","name":"Gerenciar solicitações de credenciamento","description":" Como um admnistrador do sistema\n Quero visualizar uma solicitação de credencimento em aberto\n Para decidir se vou aceitar ou recusar tal solicitação","line":4,"comments":[{"value":"#encoding: utf-8","line":2}],"elements":[{"keyword":"Contexto","name":"","description":"","line":9,"type":"background","before":[{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:14"},"result":{"status":"passed","duration":21800}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:22"},"result":{"status":"passed","duration":12500}}],"steps":[{"keyword":"Dado ","name":"que os seguintes solicitações estejam pendentes:","line":10,"rows":[{"cells":["title","due_date","activity_type_id"]},{"cells":["Solicitação 1","02-Jan-2021","Solicitação de credenciamento"]},{"cells":["Solicitação 2","02-Jan-2021","Solicitação de credenciamento"]},{"cells":["Solicitação 3","02-Jan-2021","Solicitação de credenciamento"]},{"cells":["Solicitação 4","02-Jan-2021","Solicitação de credenciamento"]}],"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:1"},"result":{"status":"pending","error_message":"TODO (Cucumber::Pending)\n./features/step_definitions/credenciamento_professores_steps.rb:2:in `\"que os seguintes solicitações estejam pendentes:\"'\nfeatures/gerenciar_solicitacoes_credenciamento.feature:10:in `Dado que os seguintes solicitações estejam pendentes:'","duration":8013000}},{"keyword":"E ","name":"que eu estou cadastrado e logado como \"Gabriel\", \"gabriel@admin.com\", \"gabriel123\", \"administrator\", \"200000000\"","line":17,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:8"},"result":{"status":"skipped"}},{"keyword":"E ","name":"que eu estou na página de solicitações de credenciamento","line":18,"match":{"location":"features/gerenciar_solicitacoes_credenciamento.feature:18"},"result":{"status":"undefined"}}]},{"id":"gerenciar-solicitações-de-credenciamento;aceitar-uma-solicitação-de-credenciamento","keyword":"Cenário","name":"Aceitar uma solicitação de credenciamento","description":"","line":20,"type":"scenario","steps":[{"keyword":"Quando ","name":"eu clico em \"Solicitação 1\"","line":21,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:34"},"result":{"status":"skipped"}},{"keyword":"Então ","name":"eu devo estar na página da \"Solicitação 1\"","line":22,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:38"},"result":{"status":"skipped"}},{"keyword":"Quando ","name":"eu clico em \"Aprovar\"","line":23,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:34"},"result":{"status":"skipped"}},{"keyword":"Então ","name":"eu devo estar na página de solicitações de credenciamento","line":24,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:38"},"result":{"status":"skipped"}},{"keyword":"Quando ","name":"eu desmarco os seguintes estados: Rejeitadas, Reformulação","line":25,"match":{"location":"features/gerenciar_solicitacoes_credenciamento.feature:25"},"result":{"status":"undefined"}},{"keyword":"E ","name":"eu marco os seguintes estados: Aprovadas","line":26,"match":{"location":"features/gerenciar_solicitacoes_credenciamento.feature:26"},"result":{"status":"undefined"}},{"keyword":"E ","name":"aperto 'Atualizar'","line":27,"match":{"location":"features/gerenciar_solicitacoes_credenciamento.feature:27"},"result":{"status":"undefined"}},{"keyword":"Então ","name":"eu devo ver \"Solicitação 1\"","line":28,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:63"},"result":{"status":"skipped"}}],"after":[{"embeddings":[{"mime_type":"image/png","data":"bG9nL3NjcmVlbnNob3RzL2FjZWl0YXJ1bWFzb2xpY2l0YW9kZWNyZWRlbmNpYW1lbnRvLnBuZw=="}],"match":{"location":"features/support/hooks.rb:1"},"result":{"status":"passed","duration":173000}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:10"},"result":{"status":"passed","duration":16300}}]},{"keyword":"Contexto","name":"","description":"","line":9,"type":"background","before":[{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:14"},"result":{"status":"passed","duration":11100}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:22"},"result":{"status":"passed","duration":12000}}],"steps":[{"keyword":"Dado ","name":"que os seguintes solicitações estejam pendentes:","line":10,"rows":[{"cells":["title","due_date","activity_type_id"]},{"cells":["Solicitação 1","02-Jan-2021","Solicitação de credenciamento"]},{"cells":["Solicitação 2","02-Jan-2021","Solicitação de credenciamento"]},{"cells":["Solicitação 3","02-Jan-2021","Solicitação de credenciamento"]},{"cells":["Solicitação 4","02-Jan-2021","Solicitação de credenciamento"]}],"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:1"},"result":{"status":"pending","error_message":"TODO (Cucumber::Pending)\n./features/step_definitions/credenciamento_professores_steps.rb:2:in `\"que os seguintes solicitações estejam pendentes:\"'\nfeatures/gerenciar_solicitacoes_credenciamento.feature:10:in `Dado que os seguintes solicitações estejam pendentes:'","duration":158300}},{"keyword":"E ","name":"que eu estou cadastrado e logado como \"Gabriel\", \"gabriel@admin.com\", \"gabriel123\", \"administrator\", \"200000000\"","line":17,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:8"},"result":{"status":"skipped"}},{"keyword":"E ","name":"que eu estou na página de solicitações de credenciamento","line":18,"match":{"location":"features/gerenciar_solicitacoes_credenciamento.feature:18"},"result":{"status":"undefined"}}]},{"id":"gerenciar-solicitações-de-credenciamento;recusar-uma-solicitação-de-credenciamento","keyword":"Cenário","name":"Recusar uma solicitação de credenciamento","description":"","line":30,"type":"scenario","steps":[{"keyword":"Quando ","name":"eu clico em \"Solicitação 2\"","line":31,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:34"},"result":{"status":"skipped"}},{"keyword":"Então ","name":"eu devo estar na página da \"Solicitação 2\"","line":32,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:38"},"result":{"status":"skipped"}},{"keyword":"Quando ","name":"eu clico em \"Rejeitar\"","line":33,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:34"},"result":{"status":"skipped"}},{"keyword":"Então ","name":"eu devo estar na página de solicitações de credenciamento","line":34,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:38"},"result":{"status":"skipped"}},{"keyword":"Quando ","name":"eu desmarco os seguintes estados: Aprovadas, Reformulação","line":35,"match":{"location":"features/gerenciar_solicitacoes_credenciamento.feature:35"},"result":{"status":"undefined"}},{"keyword":"E ","name":"eu marco os seguintes estados: Rejeitadas","line":36,"match":{"location":"features/gerenciar_solicitacoes_credenciamento.feature:36"},"result":{"status":"undefined"}},{"keyword":"E ","name":"aperto 'Atualizar'","line":37,"match":{"location":"features/gerenciar_solicitacoes_credenciamento.feature:37"},"result":{"status":"undefined"}},{"keyword":"Então ","name":"eu devo ver \"Solicitação 2\"","line":38,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:63"},"result":{"status":"skipped"}}],"after":[{"embeddings":[{"mime_type":"image/png","data":"bG9nL3NjcmVlbnNob3RzL3JlY3VzYXJ1bWFzb2xpY2l0YW9kZWNyZWRlbmNpYW1lbnRvLnBuZw=="}],"match":{"location":"features/support/hooks.rb:1"},"result":{"status":"passed","duration":244100}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:10"},"result":{"status":"passed","duration":22100}}]}]},{"uri":"features/spike.feature","id":"testar","keyword":"Funcionalidade","name":"Testar","description":"","line":4,"comments":[{"value":"#encoding: utf-8","line":2}],"elements":[{"id":"testar;","keyword":"Cenário","name":"","description":"","line":5,"type":"scenario","before":[{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:14"},"result":{"status":"passed","duration":12300}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:22"},"result":{"status":"passed","duration":9900}}],"steps":[{"keyword":"Dado ","name":"que eu estou cadastrado e logado como \"Gabriel\", \"gabriel@admin.com\", \"gabriel123\", \"administrator\", \"200000000\"","line":6,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:8"},"result":{"status":"passed","duration":2499355600}}],"after":[{"embeddings":[{"mime_type":"image/png","data":"bG9nL3NjcmVlbnNob3RzLy5wbmc="}],"match":{"location":"features/support/hooks.rb:1"},"result":{"status":"passed","duration":182300}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:10"},"result":{"status":"passed","duration":18100}}]}]}] \ No newline at end of file diff --git a/spike.rb b/spike.rb index a5837c1e..5ef3f7c4 100644 --- a/spike.rb +++ b/spike.rb @@ -12,5 +12,5 @@ # p record # frase = "\"gabriel@admin.com\", \"gabriel123\"" -# values = frase.gsub!(/"/,'').split(/,\s?/) +# values = frase.gsub!(/["']/,'').split(/,\s?/) # p values \ No newline at end of file From 2d8b43f9354f4b4fcbcddb5c870dd25b36720782 Mon Sep 17 00:00:00 2001 From: ngsylar Date: Mon, 9 Nov 2020 23:34:38 -0300 Subject: [PATCH 11/36] EngSwCIC#21 and EngSwCIC#23 adjustments --- .../abrir_solicitacao_credenciamento.feature | 39 ++++++++----------- ...enciar_solicitacoes_credenciamento.feature | 8 ++-- .../credenciamento_professores_steps.rb | 6 ++- 3 files changed, 25 insertions(+), 28 deletions(-) diff --git a/features/abrir_solicitacao_credenciamento.feature b/features/abrir_solicitacao_credenciamento.feature index 910d270f..7d591d99 100644 --- a/features/abrir_solicitacao_credenciamento.feature +++ b/features/abrir_solicitacao_credenciamento.feature @@ -1,29 +1,22 @@ #language: pt #encoding: utf-8 -Funcionalidade: Solicitar credenciamento - Como professor autenticado no sistema, - Quero poder solicitar meu credenciamento - Para que eu possa ser um professor credenciado +Funcionalidade: Abrir solicitação de credenciamento + Como professor autenticado no sistema, + Quero poder abrir uma solicitação de credenciamento + Para que eu possa ser um professor credenciado - Contexto: - Dado que eu esteja cadastrado como usuário "prof1@user.com" - E que esteja logado - E que esteja na página de credenciamento - E esteja pendente de credenciamento + Contexto: + Dado que eu estou cadastrado e logado como "Lucas", "lucas@professor.com", "lucas123", "professor", "200000000" + E que eu estou na página de abrir solicitação de credenciamento - Cenário: Solicitacao enviada com sucesso - Quando eu preencher o número do processo SEI - E clicar no botão "Solicitar credenciamento" - Então é enviado à administração uma solicitação de credenciamento - E aparece uma mensagem de confirmação + Cenário: Solicitação enviada com sucesso + Quando eu anexo o arquivo "Formulário de Credenciamento.pdf" no campo 'Formulario' + E eu anexo o arquivo "CV Lattes.pdf" em 'CV Lattes' + E eu clico em 'Enviar' + Então eu devo ver "Solicitação enviada com sucesso" - Cenário: Solicitacao não enviada - erro no número do processo - Quando eu preencher com um número qualquer - E clicar no botão "Solicitar credenciamento" - Então a mensagem de erro "Número inválido" - - Cenário: Solicitação não enviada - campo em branco - Quando eu não preencher o campo do número do processo SEI - E clicar no botão "Solicitar credenciamento" - Então a mensagem de erro "Campo obrigatório em branco" \ No newline at end of file + Cenário: Solicitação não enviada (campo obrigatório em branco) + Quando eu anexo o arquivo "Formulário de Credenciamento.pdf" no campo 'Formulario' + E eu clico em 'Enviar' + Então eu devo ver "Solicitação não enviada (campo obrigatório* em branco)" \ No newline at end of file diff --git a/features/gerenciar_solicitacoes_credenciamento.feature b/features/gerenciar_solicitacoes_credenciamento.feature index 3598e10d..67e71c4f 100644 --- a/features/gerenciar_solicitacoes_credenciamento.feature +++ b/features/gerenciar_solicitacoes_credenciamento.feature @@ -20,19 +20,19 @@ Funcionalidade: Gerenciar solicitações de credenciamento Cenário: Aceitar uma solicitação de credenciamento Quando eu clico em "Solicitação 1" Então eu devo estar na página da "Solicitação 1" - Quando eu clico em "Aprovar" + Quando eu clico em 'Aprovar' Então eu devo estar na página de solicitações de credenciamento Quando eu desmarco os seguintes estados: Rejeitadas, Reformulação E eu marco os seguintes estados: Aprovadas - E aperto 'Atualizar' + E eu aperto 'Atualizar' Então eu devo ver "Solicitação 1" Cenário: Recusar uma solicitação de credenciamento Quando eu clico em "Solicitação 2" Então eu devo estar na página da "Solicitação 2" - Quando eu clico em "Rejeitar" + Quando eu clico em 'Rejeitar' Então eu devo estar na página de solicitações de credenciamento Quando eu desmarco os seguintes estados: Aprovadas, Reformulação E eu marco os seguintes estados: Rejeitadas - E aperto 'Atualizar' + E eu aperto 'Atualizar' Então eu devo ver "Solicitação 2" diff --git a/features/step_definitions/credenciamento_professores_steps.rb b/features/step_definitions/credenciamento_professores_steps.rb index d9d6d856..4cb57b3f 100644 --- a/features/step_definitions/credenciamento_professores_steps.rb +++ b/features/step_definitions/credenciamento_professores_steps.rb @@ -31,7 +31,11 @@ visit path_to(page_name) end -Quando /^eu clico em "([^"]*)"$/ do |link| +Quando /^eu anexo o arquivo "([^"]*)" em '([^']*)'$/ do |path, field| + attach_file(field, File.expand_path(path)) +end + +Quando /^eu clico em '([^']*)'$/ do |link| click_link(link) end From fc54cb97acb17f5260e4ba4d6a8ee62baafc3861 Mon Sep 17 00:00:00 2001 From: ngsylar Date: Tue, 10 Nov 2020 01:50:12 -0300 Subject: [PATCH 12/36] Adjustments EngSwCIC#19 EngSwCIC#20 EngSwCIC#21 EngSwCIC#23 --- features.html | 93 ++++++- .../abrir_solicitacao_credenciamento.feature | 14 +- features/credenciamento_periodo.feature | 38 +-- ...enciar_solicitacoes_credenciamento.feature | 22 +- features/requisitos_necessarios.feature | 32 +-- .../credenciamento_professores_steps.rb | 41 ++- features/step_definitions/web_steps.rb | 254 ------------------ report.json | 2 +- 8 files changed, 173 insertions(+), 323 deletions(-) delete mode 100644 features/step_definitions/web_steps.rb diff --git a/features.html b/features.html index d4aef58d..0c37612d 100644 --- a/features.html +++ b/features.html @@ -467,26 +467,93 @@ function makeYellow(element_id) { $('#'+element_id).css('background', '#FAF834'); $('#'+element_id).css('color', '#000000'); -}

Cucumber Features

Expand All

Collapse All

# language: pt
#encoding: utf-8

Funcionalidade: Gerenciar solicitações de credenciamento

Como um admnistrador do sistema
Quero visualizar uma solicitação de credencimento em aberto
Para decidir se vou aceitar ou recusar tal solicitação

Contexto

  1. Dado que os seguintes solicitações estejam pendentes:
    features/step_definitions/credenciamento_professores_steps.rb:1
    title
    due_date
    activity_type_id
    Solicitação 1
    02-Jan-2021
    Solicitação de credenciamento
    Solicitação 2
    02-Jan-2021
    Solicitação de credenciamento
    Solicitação 3
    02-Jan-2021
    Solicitação de credenciamento
    Solicitação 4
    02-Jan-2021
    Solicitação de credenciamento
    TODO (Cucumber::Pending)
    ./features/step_definitions/credenciamento_professores_steps.rb:2:in `"que os seguintes solicitações estejam pendentes:"'
    -features/gerenciar_solicitacoes_credenciamento.feature:10:in `Dado que os seguintes solicitações estejam pendentes:'
    0Dado "que os seguintes solicitações estejam pendentes:" do |table|
    +}

    Cucumber Features

    Expand All

    Collapse All

    # language: pt
    #encoding: utf-8

    Funcionalidade: Abrir solicitação de credenciamento

    Como professor autenticado no sistema,
    Quero poder abrir uma solicitação de credenciamento
    Para que eu possa ser um professor credenciado

    Contexto

    1. Dado que eu estou cadastrado e logado como "Lucas", "lucas@professor.com", "lucas123", "professor", "200000000"
      features/step_definitions/credenciamento_professores_steps.rb:8
    2. E que eu estou na página de abrir solicitação de credenciamento
      features/step_definitions/credenciamento_professores_steps.rb:30
      Can't find mapping from "de abrir solicitação de credenciamento" to a path.
      +Now, go and add a mapping in /mnt/c/Users/Fontenelle/Desktop/UnB/9 semestre/Engenharia de Software/secretaria_ppgi/features/support/paths.rb
      ./features/support/paths.rb:31:in `rescue in path_to'
      +./features/support/paths.rb:26:in `path_to'
      +./features/step_definitions/credenciamento_professores_steps.rb:31:in `/^que eu estou na página (.+)$/'
      +features/abrir_solicitacao_credenciamento.feature:11:in `E que eu estou na página de abrir solicitação de credenciamento'
      29        self.send(path_components.push('path').join('_').to_sym)
      +30      rescue NoMethodError, ArgumentError
      +31        raise "Can't find mapping from \"#{page_name}\" to a path.\n" +
      +32          "Now, go and add a mapping in #{__FILE__}"
      +33      end
      +34# gem install syntax to get syntax highlighting
    features/abrir_solicitacao_credenciamento.feature:13

    Cenário: Solicitação enviada com sucesso

    1. Quando eu anexo o arquivo "Formulário de Credenciamento.pdf" no campo 'Formulario'
      features/abrir_solicitacao_credenciamento.feature:14
      Quando("eu anexo o arquivo {string} no campo {string}") do |string, string2|
      +  pending # Write code here that turns the phrase above into concrete actions
      +end
    2. E eu anexo o arquivo "CV Lattes.pdf" em 'CV Lattes'
      features/step_definitions/credenciamento_professores_steps.rb:34
    3. E eu clico em 'Enviar'
      features/step_definitions/credenciamento_professores_steps.rb:38
    4. Então eu devo ver "Solicitação enviada com sucesso"
      features/step_definitions/credenciamento_professores_steps.rb:67
    5. Print maroto :)
        +
      undefined method `manage' for #<Capybara::RackTest::Browser:0x00007fffcd7263a0> (NoMethodError)
      ./features/support/hooks.rb:22:in `add_browser_logs'
      +./features/support/hooks.rb:5:in `After'
      20    current_url = Capybara.current_url.to_s
      +21    # Gather browser logs
      +22    logs = page.driver.browser.manage.logs.get(:browser).map {|line| [line.level, line.message]}
      
      +23   # Remove warnings and info messages
      +24    logs.reject! { |line| ['WARNING', 'INFO'].include?(line.first) }
      +25# gem install syntax to get syntax highlighting
    features/abrir_solicitacao_credenciamento.feature:19

    Cenário: Solicitação não enviada (campo obrigatório em branco)

    1. Quando eu anexo o arquivo "Formulário de Credenciamento.pdf" no campo 'Formulario'
      features/abrir_solicitacao_credenciamento.feature:20
      Quando("eu anexo o arquivo {string} no campo {string}") do |string, string2|
      +  pending # Write code here that turns the phrase above into concrete actions
      +end
    2. E eu clico em 'Enviar'
      features/step_definitions/credenciamento_professores_steps.rb:38
    3. Então eu devo ver "Solicitação não enviada (campo obrigatório* em branco)"
      features/step_definitions/credenciamento_professores_steps.rb:67
    4. Print maroto :)
        +
      undefined method `manage' for #<Capybara::RackTest::Browser:0x00007fffce93fbb8> (NoMethodError)
      ./features/support/hooks.rb:22:in `add_browser_logs'
      +./features/support/hooks.rb:5:in `After'
      20    current_url = Capybara.current_url.to_s
      +21    # Gather browser logs
      +22    logs = page.driver.browser.manage.logs.get(:browser).map {|line| [line.level, line.message]}
      
      +23   # Remove warnings and info messages
      +24    logs.reject! { |line| ['WARNING', 'INFO'].include?(line.first) }
      +25# gem install syntax to get syntax highlighting
    # language: pt
    #encoding: utf-8

    Funcionalidade: Definir o prazo de credenciamento dos professores

    Como um administrador,
    para que eu possa credenciar os professores,
    eu gostaria de definir o prazo de credenciamento dos professores

    Contexto

    1. Dado que eu esteja autenticado como usuario "admin"
      features/credenciamento_periodo.feature:10
      Dado("que eu esteja autenticado como usuario {string}") do |string|
      +  pending # Write code here that turns the phrase above into concrete actions
      +end
    2. E que esteja na página de credenciamento
      features/credenciamento_periodo.feature:11
      Dado("que esteja na página de credenciamento") do
      +  pending # Write code here that turns the phrase above into concrete actions
      +end
    features/credenciamento_periodo.feature:13

    Cenário: Definir prazo de credenciamento sem data

    1. Quando eu aperto o botão "Definir prazo de credenciamento"
      features/credenciamento_periodo.feature:14
      Quando("eu aperto o botão {string}") do |string|
      +  pending # Write code here that turns the phrase above into concrete actions
      +end
    2. E eu aperto o botão "Salvar período"
      features/credenciamento_periodo.feature:15
      Quando("eu aperto o botão {string}") do |string|
      +  pending # Write code here that turns the phrase above into concrete actions
      +end
    3. Então eu espero ver a mensagem "Insira uma data de início e uma data de término válidas."
      features/credenciamento_periodo.feature:16
      Então("eu espero ver a mensagem {string}") do |string|
      +  pending # Write code here that turns the phrase above into concrete actions
      +end
    4. Print maroto :)
        +
    features/credenciamento_periodo.feature:18

    Cenário: Definir prazo de credenciamento com data

    1. Quando eu aperto o botão "Definir prazo de credenciamento"
      features/credenciamento_periodo.feature:19
      Quando("eu aperto o botão {string}") do |string|
      +  pending # Write code here that turns the phrase above into concrete actions
      +end
    2. Quando eu adiciono um valor "Início" para "Data de Início"
      features/credenciamento_periodo.feature:20
      Quando("eu adiciono um valor {string} para {string}") do |string, string2|
      +  pending # Write code here that turns the phrase above into concrete actions
      +end
    3. E eu adiciono um valor "Término" para "Data de Término"
      features/credenciamento_periodo.feature:21
      Quando("eu adiciono um valor {string} para {string}") do |string, string2|
      +  pending # Write code here that turns the phrase above into concrete actions
      +end
    4. E eu aperto o botão "Salvar período"
      features/credenciamento_periodo.feature:22
      Quando("eu aperto o botão {string}") do |string|
      +  pending # Write code here that turns the phrase above into concrete actions
      +end
    5. Então eu espero ver a mensagem "Prazo cadastrado com sucesso."
      features/credenciamento_periodo.feature:23
      Então("eu espero ver a mensagem {string}") do |string|
      +  pending # Write code here that turns the phrase above into concrete actions
      +end
    6. Print maroto :)
        +
    # language: pt
    #encoding: utf-8

    Funcionalidade: Gerenciar solicitações de credenciamento

    Como um admnistrador do sistema
    Quero visualizar uma solicitação de credencimento em aberto
    Para decidir se vou aceitar ou recusar tal solicitação

    Contexto

    1. Dado que as seguintes solicitações estejam pendentes:
      features/step_definitions/credenciamento_professores_steps.rb:1
      title
      due_date
      activity_type_id
      Solicitação 1
      02-Jan-2021
      Solicitação de credenciamento
      Solicitação 2
      02-Jan-2021
      Solicitação de credenciamento
      Solicitação 3
      02-Jan-2021
      Solicitação de credenciamento
      Solicitação 4
      02-Jan-2021
      Solicitação de credenciamento
      TODO (Cucumber::Pending)
      ./features/step_definitions/credenciamento_professores_steps.rb:2:in `"que as seguintes solicitações estejam pendentes:"'
      +features/gerenciar_solicitacoes_credenciamento.feature:10:in `Dado que as seguintes solicitações estejam pendentes:'
      0Dado "que as seguintes solicitações estejam pendentes:" do |table|
       1    pending
       2    # table.hashes.each do |row|
      
       3    #     Activity.create!(row)
      -4# gem install syntax to get syntax highlighting
    2. E que eu estou cadastrado e logado como "Gabriel", "gabriel@admin.com", "gabriel123", "administrator", "200000000"
      features/step_definitions/credenciamento_professores_steps.rb:8
    3. E que eu estou na página de solicitações de credenciamento
      features/gerenciar_solicitacoes_credenciamento.feature:18
      Dado("que eu estou na página de solicitações de credenciamento") do
      +4# gem install syntax to get syntax highlighting
    4. E que eu estou cadastrado e logado como "Gabriel", "gabriel@admin.com", "gabriel123", "administrator", "200000000"
      features/step_definitions/credenciamento_professores_steps.rb:8
    5. E que eu estou na página de solicitações de credenciamento
      features/step_definitions/credenciamento_professores_steps.rb:30
    features/gerenciar_solicitacoes_credenciamento.feature:20

    Cenário: Aceitar uma solicitação de credenciamento

    1. Quando eu clico em "Solicitação 1"
      features/gerenciar_solicitacoes_credenciamento.feature:21
      Quando("eu clico em {string}") do |string|
      +  pending # Write code here that turns the phrase above into concrete actions
      +end
    2. Então eu devo estar na página da "Solicitação 1"
      features/step_definitions/credenciamento_professores_steps.rb:42
    3. Quando eu clico em 'Aprovar'
      features/step_definitions/credenciamento_professores_steps.rb:38
    4. Então eu devo estar na página de solicitações de credenciamento
      features/step_definitions/credenciamento_professores_steps.rb:42
    5. Quando eu desmarco os seguintes estados: Rejeitadas, Reformulação
      features/gerenciar_solicitacoes_credenciamento.feature:25
      Quando("eu desmarco os seguintes estados: Rejeitadas, Reformulação") do
      +  pending # Write code here that turns the phrase above into concrete actions
      +end
    6. E eu marco os seguintes estados: Aprovadas
      features/gerenciar_solicitacoes_credenciamento.feature:26
      Quando("eu marco os seguintes estados: Aprovadas") do
      +  pending # Write code here that turns the phrase above into concrete actions
      +end
    7. E eu aperto 'Atualizar'
      features/step_definitions/credenciamento_professores_steps.rb:63
    8. Então eu devo ver "Solicitação 1"
      features/step_definitions/credenciamento_professores_steps.rb:67
    9. Print maroto :)
        +
    features/gerenciar_solicitacoes_credenciamento.feature:30

    Cenário: Recusar uma solicitação de credenciamento

    1. Quando eu clico em "Solicitação 2"
      features/gerenciar_solicitacoes_credenciamento.feature:31
      Quando("eu clico em {string}") do |string|
      +  pending # Write code here that turns the phrase above into concrete actions
      +end
    2. Então eu devo estar na página da "Solicitação 2"
      features/step_definitions/credenciamento_professores_steps.rb:42
    3. Quando eu clico em 'Rejeitar'
      features/step_definitions/credenciamento_professores_steps.rb:38
    4. Então eu devo estar na página de solicitações de credenciamento
      features/step_definitions/credenciamento_professores_steps.rb:42
    5. Quando eu desmarco os seguintes estados: Aprovadas, Reformulação
      features/gerenciar_solicitacoes_credenciamento.feature:35
      Quando("eu desmarco os seguintes estados: Aprovadas, Reformulação") do
      +  pending # Write code here that turns the phrase above into concrete actions
      +end
    6. E eu marco os seguintes estados: Rejeitadas
      features/gerenciar_solicitacoes_credenciamento.feature:36
      Quando("eu marco os seguintes estados: Rejeitadas") do
      +  pending # Write code here that turns the phrase above into concrete actions
      +end
    7. E eu aperto 'Atualizar'
      features/step_definitions/credenciamento_professores_steps.rb:63
    8. Então eu devo ver "Solicitação 2"
      features/step_definitions/credenciamento_professores_steps.rb:67
    9. Print maroto :)
        +
    # language: pt
    #encoding: utf-8

    Funcionalidade: Disponibilizar os requisitos necessarios para credenciamento de professores

    Como administrador autenticado no sistema,
    Quero poder disponibilizar para os professores os requisitos necessários para o credenciamento
    Para que eles possam dar procedimento ao credenciamento

    Contexto

    1. Dado que eu esteja logado como administrador de email "gp@admin.com" e senha "123"
      features/requisitos_necessarios.feature:10
      Dado("que eu esteja logado como administrador de email {string} e senha {string}") do |string, string2|
      +  pending # Write code here that turns the phrase above into concrete actions
      +end
    2. E não existem requisitos selecionados na página principal
      features/requisitos_necessarios.feature:11
      Dado("não existem requisitos selecionados na página principal") do
      +  pending # Write code here that turns the phrase above into concrete actions
      +end
    3. Quando o administrador clicou no link para alterar documentos necessários para credenciamento
      features/requisitos_necessarios.feature:12
      Quando("o administrador clicou no link para alterar documentos necessários para credenciamento") do
         pending # Write code here that turns the phrase above into concrete actions
      -end
    features/gerenciar_solicitacoes_credenciamento.feature:20

    Cenário: Aceitar uma solicitação de credenciamento

    1. Quando eu clico em "Solicitação 1"
      features/step_definitions/credenciamento_professores_steps.rb:34
    2. Então eu devo estar na página da "Solicitação 1"
      features/step_definitions/credenciamento_professores_steps.rb:38
    3. Quando eu clico em "Aprovar"
      features/step_definitions/credenciamento_professores_steps.rb:34
    4. Então eu devo estar na página de solicitações de credenciamento
      features/step_definitions/credenciamento_professores_steps.rb:38
    5. Quando eu desmarco os seguintes estados: Rejeitadas, Reformulação
      features/gerenciar_solicitacoes_credenciamento.feature:25
      Quando("eu desmarco os seguintes estados: Rejeitadas, Reformulação") do
      +end
    features/requisitos_necessarios.feature:14

    Cenário: Os campos puderam ser selecionados

    1. Quando eu selecionar os campos
      features/requisitos_necessarios.feature:15
      Quando("eu selecionar os campos") do
         pending # Write code here that turns the phrase above into concrete actions
      -end
    2. E eu marco os seguintes estados: Aprovadas
      features/gerenciar_solicitacoes_credenciamento.feature:26
      Quando("eu marco os seguintes estados: Aprovadas") do
      +end
    3. E eu clicar no botão atualizar requisitos
      features/requisitos_necessarios.feature:16
      Quando("eu clicar no botão atualizar requisitos") do
         pending # Write code here that turns the phrase above into concrete actions
      -end
    4. E aperto 'Atualizar'
      features/gerenciar_solicitacoes_credenciamento.feature:27
      Quando("aperto {string}") do |string|
      +end
    5. Então eu devo voltar para a página principal aonde aparece meus requisitos selecionados
      features/requisitos_necessarios.feature:17
      Então("eu devo voltar para a página principal aonde aparece meus requisitos selecionados") do
         pending # Write code here that turns the phrase above into concrete actions
      -end
    6. Então eu devo ver "Solicitação 1"
      features/step_definitions/credenciamento_professores_steps.rb:63
    7. Print maroto :)
        -
    features/gerenciar_solicitacoes_credenciamento.feature:30

    Cenário: Recusar uma solicitação de credenciamento

    1. Quando eu clico em "Solicitação 2"
      features/step_definitions/credenciamento_professores_steps.rb:34
    2. Então eu devo estar na página da "Solicitação 2"
      features/step_definitions/credenciamento_professores_steps.rb:38
    3. Quando eu clico em "Rejeitar"
      features/step_definitions/credenciamento_professores_steps.rb:34
    4. Então eu devo estar na página de solicitações de credenciamento
      features/step_definitions/credenciamento_professores_steps.rb:38
    5. Quando eu desmarco os seguintes estados: Aprovadas, Reformulação
      features/gerenciar_solicitacoes_credenciamento.feature:35
      Quando("eu desmarco os seguintes estados: Aprovadas, Reformulação") do
      +end
    6. Print maroto :)
        +
    features/requisitos_necessarios.feature:19

    Cenário: Não houveram mudanças feitas

    1. Quando eu não selecionar os campos
      features/requisitos_necessarios.feature:20
      Quando("eu não selecionar os campos") do
         pending # Write code here that turns the phrase above into concrete actions
      -end
    2. E eu marco os seguintes estados: Rejeitadas
      features/gerenciar_solicitacoes_credenciamento.feature:36
      Quando("eu marco os seguintes estados: Rejeitadas") do
      +end
    3. E eu clicar no botão atualizar requisitos
      features/requisitos_necessarios.feature:21
      Quando("eu clicar no botão atualizar requisitos") do
         pending # Write code here that turns the phrase above into concrete actions
      -end
    4. E aperto 'Atualizar'
      features/gerenciar_solicitacoes_credenciamento.feature:37
      Quando("aperto {string}") do |string|
      +end
    5. Então eu recebo uma mensagem dizendo que "não houveram mudanças"
      features/requisitos_necessarios.feature:22
      Então("eu recebo uma mensagem dizendo que {string}") do |string|
         pending # Write code here that turns the phrase above into concrete actions
      -end
    6. Então eu devo ver "Solicitação 2"
      features/step_definitions/credenciamento_professores_steps.rb:63
    7. Print maroto :)
        -
    # language: pt
    #encoding: utf-8

    Funcionalidade: Testar

    features/spike.feature:5

    Cenário:

    1. Dado que eu estou cadastrado e logado como "Gabriel", "gabriel@admin.com", "gabriel123", "administrator", "200000000"
      features/step_definitions/credenciamento_professores_steps.rb:8
    2. Print maroto :)
        -
    \ No newline at end of file +end
  2. Print maroto :)
      +
# language: pt
#encoding: utf-8

Funcionalidade: Testar

features/spike.feature:5

Cenário:

  1. Dado que eu estou cadastrado e logado como "Gabriel", "gabriel@admin.com", "gabriel123", "administrator", "200000000"
    features/step_definitions/credenciamento_professores_steps.rb:8
  2. Print maroto :)
      +
\ No newline at end of file diff --git a/features/abrir_solicitacao_credenciamento.feature b/features/abrir_solicitacao_credenciamento.feature index 7d591d99..593ecbcd 100644 --- a/features/abrir_solicitacao_credenciamento.feature +++ b/features/abrir_solicitacao_credenciamento.feature @@ -2,21 +2,21 @@ #encoding: utf-8 Funcionalidade: Abrir solicitação de credenciamento - Como professor autenticado no sistema, + Como um professor autenticado no sistema, Quero poder abrir uma solicitação de credenciamento Para que eu possa ser um professor credenciado Contexto: - Dado que eu estou cadastrado e logado como "Lucas", "lucas@professor.com", "lucas123", "professor", "200000000" - E que eu estou na página de abrir solicitação de credenciamento + Dado que eu esteja cadastrado e logado como "Lucas", "lucas@professor.com", "lucas123", "professor", "200000000" + E que eu esteja na página de abrir solicitação de credenciamento Cenário: Solicitação enviada com sucesso - Quando eu anexo o arquivo "Formulário de Credenciamento.pdf" no campo 'Formulario' + Quando eu anexo o arquivo "Formulário de Credenciamento.pdf" em 'Formulario' E eu anexo o arquivo "CV Lattes.pdf" em 'CV Lattes' - E eu clico em 'Enviar' + E eu aperto 'Enviar' Então eu devo ver "Solicitação enviada com sucesso" Cenário: Solicitação não enviada (campo obrigatório em branco) - Quando eu anexo o arquivo "Formulário de Credenciamento.pdf" no campo 'Formulario' - E eu clico em 'Enviar' + Quando eu anexo o arquivo "Formulário de Credenciamento.pdf" em 'Formulario' + E eu aperto 'Enviar' Então eu devo ver "Solicitação não enviada (campo obrigatório* em branco)" \ No newline at end of file diff --git a/features/credenciamento_periodo.feature b/features/credenciamento_periodo.feature index bc113ceb..2a320233 100644 --- a/features/credenciamento_periodo.feature +++ b/features/credenciamento_periodo.feature @@ -2,22 +2,30 @@ #encoding: utf-8 Funcionalidade: Definir o prazo de credenciamento dos professores - Como um administrador, - para que eu possa credenciar os professores, - eu gostaria de definir o prazo de credenciamento dos professores + Como um administrador autenticado no sistema, + Quero visualizar professores com credenciamento aprovado + Para definir o prazo de credenciamento dos professores Contexto: - Dado que eu esteja autenticado como usuario "admin" - E que esteja na página de credenciamento + Dado que existam os seguintes credenciamentos sem prazo definido: + | title | full_name | + | Credenciamento 1 | Adalberto | + | Credenciamento 2 | Mariano | + | Credenciamento 3 | Joel | + + E que eu esteja cadastrado e logado como "Aécio", "aecio@admin.com", "aecio123", "administrator", "200000000" + E que esteja na página de prazos de credenciamento - Cenário: Definir prazo de credenciamento sem data - Quando eu aperto o botão "Definir prazo de credenciamento" - E eu aperto o botão "Salvar período" - Então eu espero ver a mensagem "Insira uma data de início e uma data de término válidas." + Cenário: Definir prazo inserindo uma data válida + Quando eu clico em "Credenciamento 2" + Então eu devo estar na página de "Credenciamento 2" + Quando eu seleciono "2022-10-10" como data de 'Prazo' + E eu aperto 'Salvar' + Então eu devo ver "Prazo cadastrado com sucesso" - Cenário: Definir prazo de credenciamento com data - Quando eu aperto o botão "Definir prazo de credenciamento" - Quando eu adiciono um valor "Início" para "Data de Início" - E eu adiciono um valor "Término" para "Data de Término" - E eu aperto o botão "Salvar período" - Então eu espero ver a mensagem "Prazo cadastrado com sucesso." \ No newline at end of file + Cenário: Definir prazo inserindo data inválida + Quando eu clico em "Credenciamento 3" + Então eu devo estar na página de "Credenciamento 3" + Quando eu seleciono "1990-10-10" como data de 'Prazo' + E eu aperto 'Salvar' + Então eu devo ver "Prazo não cadastrado - data inválida" \ No newline at end of file diff --git a/features/gerenciar_solicitacoes_credenciamento.feature b/features/gerenciar_solicitacoes_credenciamento.feature index 67e71c4f..deb85efc 100644 --- a/features/gerenciar_solicitacoes_credenciamento.feature +++ b/features/gerenciar_solicitacoes_credenciamento.feature @@ -2,24 +2,24 @@ #encoding: utf-8 Funcionalidade: Gerenciar solicitações de credenciamento - Como um admnistrador do sistema + Como um admnistrador autenticado no sistema, Quero visualizar uma solicitação de credencimento em aberto Para decidir se vou aceitar ou recusar tal solicitação Contexto: - Dado que as seguintes solicitações estejam pendentes: - | title | due_date | activity_type_id | - | Solicitação 1 | 02-Jan-2021 | Solicitação de credenciamento | - | Solicitação 2 | 02-Jan-2021 | Solicitação de credenciamento | - | Solicitação 3 | 02-Jan-2021 | Solicitação de credenciamento | - | Solicitação 4 | 02-Jan-2021 | Solicitação de credenciamento | + Dado que existam as seguintes solicitações: + | title | activity_type_id | + | Solicitação 1 | Solicitação de credenciamento | + | Solicitação 2 | Solicitação de credenciamento | + | Solicitação 3 | Solicitação de credenciamento | + | Solicitação 4 | Solicitação de credenciamento | - E que eu estou cadastrado e logado como "Gabriel", "gabriel@admin.com", "gabriel123", "administrator", "200000000" - E que eu estou na página de solicitações de credenciamento + E que eu esteja cadastrado e logado como "Gabriel", "gabriel@admin.com", "gabriel123", "administrator", "200000000" + E que eu esteja na página de solicitações de credenciamento Cenário: Aceitar uma solicitação de credenciamento Quando eu clico em "Solicitação 1" - Então eu devo estar na página da "Solicitação 1" + Então eu devo estar na página de "Solicitação 1" Quando eu clico em 'Aprovar' Então eu devo estar na página de solicitações de credenciamento Quando eu desmarco os seguintes estados: Rejeitadas, Reformulação @@ -29,7 +29,7 @@ Funcionalidade: Gerenciar solicitações de credenciamento Cenário: Recusar uma solicitação de credenciamento Quando eu clico em "Solicitação 2" - Então eu devo estar na página da "Solicitação 2" + Então eu devo estar na página de "Solicitação 2" Quando eu clico em 'Rejeitar' Então eu devo estar na página de solicitações de credenciamento Quando eu desmarco os seguintes estados: Aprovadas, Reformulação diff --git a/features/requisitos_necessarios.feature b/features/requisitos_necessarios.feature index 90199605..4d7a7ed5 100644 --- a/features/requisitos_necessarios.feature +++ b/features/requisitos_necessarios.feature @@ -1,22 +1,22 @@ #language: pt #encoding: utf-8 -Funcionalidade: Disponibilizar os requisitos necessarios para credenciamento de professores - Como administrador autenticado no sistema, - Quero poder disponibilizar para os professores os requisitos necessários para o credenciamento - Para que eles possam dar procedimento ao credenciamento +Funcionalidade: Disponibilizar os requisitos para o credenciamento + Como um administrador autenticado no sistema, + Para que os professores possam abrir solicitações de credenciamento + Quero poder disponibilizar os requisitos necessários para o credenciamento Contexto: - Dado que eu esteja logado como administrador de email "gp@admin.com" e senha "123" - E não existem requisitos selecionados na página principal - Quando o administrador clicou no link para alterar documentos necessários para credenciamento + Dado que eu esteja cadastrado e logado como "Preihs", "preihs@admin.com", "preihs123", "administrator", "200000000" + E que eu esteja na página de requisitos para o credenciamento - Cenário: Os campos puderam ser selecionados - Quando eu selecionar os campos - E eu clicar no botão atualizar requisitos - Então eu devo voltar para a página principal aonde aparece meus requisitos selecionados - - Cenário: Não houveram mudanças feitas - Quando eu não selecionar os campos - E eu clicar no botão atualizar requisitos - Então eu recebo uma mensagem dizendo que "não houveram mudanças" + Cenário: Modificar os requisitos necessários para o credenciamento + Quando eu preencho em 'Requisitos' com + """ + - Formulário de solicitação preenchido e assinado pelo interessado* + - CV Lattes do coorientador* (apenas dados de publicação dos últimos 5 anos) + - Cópia do passaporte (apenas caso de orientador/coorientador estrangeiro) + """ + E eu anexo o arquivo "Formulário de Credenciamento.doc" no campo 'Formulario' + E eu aperto 'Enviar' + Então eu devo ver "Requisitos atualizados com sucesso" diff --git a/features/step_definitions/credenciamento_professores_steps.rb b/features/step_definitions/credenciamento_professores_steps.rb index 4cb57b3f..7d12b4dc 100644 --- a/features/step_definitions/credenciamento_professores_steps.rb +++ b/features/step_definitions/credenciamento_professores_steps.rb @@ -1,11 +1,27 @@ -Dado "que as seguintes solicitações estejam pendentes:" do |table| +require 'uri' +require 'cgi' +require File.expand_path(File.join(File.dirname(__FILE__), "..", "support", "paths")) +require File.expand_path(File.join(File.dirname(__FILE__), "..", "support", "selectors")) + +module WithinHelpers + def with_scope(locator) + locator ? within(*selector_for(locator)) { yield } : yield + end +end +World(WithinHelpers) + +Dado "que existam as seguintes solicitações:" do |table| pending # table.hashes.each do |row| # Activity.create!(row) # end end -Dado /^que eu estou cadastrado e logado como (.*)$/ do |input| +Dado "que existam os seguintes credenciamentos sem prazo definido:" do |table| + pending +end + +Dado /^que eu esteja cadastrado e logado como (.*)$/ do |input| user_props = [:full_name, :email, :password, :role, :registration] values = input.gsub!(/"/,'').split(/,\s?/) @@ -13,11 +29,11 @@ User.create!(record) steps %( - Dado que eu estou logado como "#{record[:email]}", "#{record[:password]}" + Dado que eu esteja logado como "#{record[:email]}", "#{record[:password]}" ) end -Dado /^que eu estou logado como (.*)$/ do |input| +Dado /^que eu esteja logado como (.*)$/ do |input| fields = ['email', 'password'] values = Hash[fields.zip input.gsub!(/"/,'').split(/,\s?/)] @@ -27,8 +43,9 @@ click_button("Log in") end -Dado /^que eu estou na página (.+)$/ do |page_name| - visit path_to(page_name) +Dado /^que eu esteja na página (.+)$/ do |page_name| + pending + # visit path_to(page_name) end Quando /^eu anexo o arquivo "([^"]*)" em '([^']*)'$/ do |path, field| @@ -60,6 +77,18 @@ end end +Quando /^eu preencho em '([^']*)' com/m do |field, text| + fill_in(field, :with => text) +end + +Quando /^eu preencho com "([^"]*)" em '([^']*)'$/ do |field, text| + fill_in(field, :with => text) +end + +Quando /^eu seleciono "([^"]*)" como data de '([^']*)'$/ do |date, field| + select_date(date, :from => field) +end + Quando /^eu aperto '([^']*)'$/ do |button| click_button(button) end diff --git a/features/step_definitions/web_steps.rb b/features/step_definitions/web_steps.rb deleted file mode 100644 index 94c2db84..00000000 --- a/features/step_definitions/web_steps.rb +++ /dev/null @@ -1,254 +0,0 @@ -# TL;DR: YOU SHOULD DELETE THIS FILE -# -# This file was generated by Cucumber-Rails and is only here to get you a head start -# These step definitions are thin wrappers around the Capybara/Webrat API that lets you -# visit pages, interact with widgets and make assertions about page content. -# -# If you use these step definitions as basis for your features you will quickly end up -# with features that are: -# -# * Hard to maintain -# * Verbose to read -# -# A much better approach is to write your own higher level step definitions, following -# the advice in the following blog posts: -# -# * http://benmabey.com/2008/05/19/imperative-vs-declarative-scenarios-in-user-stories.html -# * http://dannorth.net/2011/01/31/whose-domain-is-it-anyway/ -# * http://elabs.se/blog/15-you-re-cuking-it-wrong -# - - -require 'uri' -require 'cgi' -require File.expand_path(File.join(File.dirname(__FILE__), "..", "support", "paths")) -require File.expand_path(File.join(File.dirname(__FILE__), "..", "support", "selectors")) - -module WithinHelpers - def with_scope(locator) - locator ? within(*selector_for(locator)) { yield } : yield - end -end -World(WithinHelpers) - -# # Single-line step scoper -# When /^(.*) within (.*[^:])$/ do |step, parent| -# with_scope(parent) { When step } -# end - -# # Multi-line step scoper -# When /^(.*) within (.*[^:]):$/ do |step, parent, table_or_string| -# with_scope(parent) { When "#{step}:", table_or_string } -# end - -# Given /^(?:|I )am on (.+)$/ do |page_name| -# visit path_to(page_name) -# end - -# When /^(?:|I )go to (.+)$/ do |page_name| -# visit path_to(page_name) -# end - -# When /^(?:|I )press "([^"]*)"$/ do |button| -# click_button(button) -# end - -# When /^(?:|I )follow "([^"]*)"$/ do |link| -# click_link(link) -# end - -# When /^(?:|I )fill in "([^"]*)" with "([^"]*)"$/ do |field, value| -# fill_in(field, :with => value) -# end - -# When /^(?:|I )fill in "([^"]*)" for "([^"]*)"$/ do |value, field| -# fill_in(field, :with => value) -# end - -# # Use this to fill in an entire form with data from a table. Example: -# # -# # When I fill in the following: -# # | Account Number | 5002 | -# # | Expiry date | 2009-11-01 | -# # | Note | Nice guy | -# # | Wants Email? | | -# # -# # TODO: Add support for checkbox, select or option -# # based on naming conventions. -# # -# When /^(?:|I )fill in the following:$/ do |fields| -# fields.rows_hash.each do |name, value| -# When %{I fill in "#{name}" with "#{value}"} -# end -# end - -# When /^(?:|I )select "([^"]*)" from "([^"]*)"$/ do |value, field| -# select(value, :from => field) -# end - -# When /^(?:|I )check "([^"]*)"$/ do |field| -# check(field) -# end - -# When /^(?:|I )uncheck "([^"]*)"$/ do |field| -# uncheck(field) -# end - -# When /^(?:|I )choose "([^"]*)"$/ do |field| -# choose(field) -# end - -# When /^(?:|I )attach the file "([^"]*)" to "([^"]*)"$/ do |path, field| -# attach_file(field, File.expand_path(path)) -# end - -# Then /^(?:|I )should see "([^"]*)"$/ do |text| -# if page.respond_to? :should -# page.should have_content(text) -# else -# assert page.has_content?(text) -# end -# end - -# Then /^(?:|I )should see \/([^\/]*)\/$/ do |regexp| -# regexp = Regexp.new(regexp) - -# if page.respond_to? :should -# page.should have_xpath('//*', :text => regexp) -# else -# assert page.has_xpath?('//*', :text => regexp) -# end -# end - -# Then /^(?:|I )should not see "([^"]*)"$/ do |text| -# if page.respond_to? :should -# page.should have_no_content(text) -# else -# assert page.has_no_content?(text) -# end -# end - -# Then /^(?:|I )should not see \/([^\/]*)\/$/ do |regexp| -# regexp = Regexp.new(regexp) - -# if page.respond_to? :should -# page.should have_no_xpath('//*', :text => regexp) -# else -# assert page.has_no_xpath?('//*', :text => regexp) -# end -# end - -# Then /^the "([^"]*)" field(?: within (.*))? should contain "([^"]*)"$/ do |field, parent, value| -# with_scope(parent) do -# field = find_field(field) -# field_value = (field.tag_name == 'textarea') ? field.text : field.value -# if field_value.respond_to? :should -# field_value.should =~ /#{value}/ -# else -# assert_match(/#{value}/, field_value) -# end -# end -# end - -# Then /^the "([^"]*)" field(?: within (.*))? should not contain "([^"]*)"$/ do |field, parent, value| -# with_scope(parent) do -# field = find_field(field) -# field_value = (field.tag_name == 'textarea') ? field.text : field.value -# if field_value.respond_to? :should_not -# field_value.should_not =~ /#{value}/ -# else -# assert_no_match(/#{value}/, field_value) -# end -# end -# end - -# Then /^the "([^"]*)" field should have the error "([^"]*)"$/ do |field, error_message| -# element = find_field(field) -# classes = element.find(:xpath, '..')[:class].split(' ') - -# form_for_input = element.find(:xpath, 'ancestor::form[1]') -# using_formtastic = form_for_input[:class].include?('formtastic') -# error_class = using_formtastic ? 'error' : 'field_with_errors' - -# if classes.respond_to? :should -# classes.should include(error_class) -# else -# assert classes.include?(error_class) -# end - -# if page.respond_to?(:should) -# if using_formtastic -# error_paragraph = element.find(:xpath, '../*[@class="inline-errors"][1]') -# error_paragraph.should have_content(error_message) -# else -# page.should have_content("#{field.titlecase} #{error_message}") -# end -# else -# if using_formtastic -# error_paragraph = element.find(:xpath, '../*[@class="inline-errors"][1]') -# assert error_paragraph.has_content?(error_message) -# else -# assert page.has_content?("#{field.titlecase} #{error_message}") -# end -# end -# end - -# Then /^the "([^"]*)" field should have no error$/ do |field| -# element = find_field(field) -# classes = element.find(:xpath, '..')[:class].split(' ') -# if classes.respond_to? :should -# classes.should_not include('field_with_errors') -# classes.should_not include('error') -# else -# assert !classes.include?('field_with_errors') -# assert !classes.include?('error') -# end -# end - -# Then /^the "([^"]*)" checkbox(?: within (.*))? should be checked$/ do |label, parent| -# with_scope(parent) do -# field_checked = find_field(label)['checked'] -# if field_checked.respond_to? :should -# field_checked.should be_true -# else -# assert field_checked -# end -# end -# end - -# Then /^the "([^"]*)" checkbox(?: within (.*))? should not be checked$/ do |label, parent| -# with_scope(parent) do -# field_checked = find_field(label)['checked'] -# if field_checked.respond_to? :should -# field_checked.should be_false -# else -# assert !field_checked -# end -# end -# end - -# Then /^(?:|I )should be on (.+)$/ do |page_name| -# current_path = URI.parse(current_url).path -# if current_path.respond_to? :should -# current_path.should == path_to(page_name) -# else -# assert_equal path_to(page_name), current_path -# end -# end - -# Then /^(?:|I )should have the following query string:$/ do |expected_pairs| -# query = URI.parse(current_url).query -# actual_params = query ? CGI.parse(query) : {} -# expected_params = {} -# expected_pairs.rows_hash.each_pair{|k,v| expected_params[k] = v.split(',')} - -# if actual_params.respond_to? :should -# actual_params.should == expected_params -# else -# assert_equal expected_params, actual_params -# end -# end - -# Then /^show me the page$/ do -# save_and_open_page -# end diff --git a/report.json b/report.json index d79596a6..43b1702d 100644 --- a/report.json +++ b/report.json @@ -1 +1 @@ -[{"uri":"features/gerenciar_solicitacoes_credenciamento.feature","id":"gerenciar-solicitações-de-credenciamento","keyword":"Funcionalidade","name":"Gerenciar solicitações de credenciamento","description":" Como um admnistrador do sistema\n Quero visualizar uma solicitação de credencimento em aberto\n Para decidir se vou aceitar ou recusar tal solicitação","line":4,"comments":[{"value":"#encoding: utf-8","line":2}],"elements":[{"keyword":"Contexto","name":"","description":"","line":9,"type":"background","before":[{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:14"},"result":{"status":"passed","duration":21800}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:22"},"result":{"status":"passed","duration":12500}}],"steps":[{"keyword":"Dado ","name":"que os seguintes solicitações estejam pendentes:","line":10,"rows":[{"cells":["title","due_date","activity_type_id"]},{"cells":["Solicitação 1","02-Jan-2021","Solicitação de credenciamento"]},{"cells":["Solicitação 2","02-Jan-2021","Solicitação de credenciamento"]},{"cells":["Solicitação 3","02-Jan-2021","Solicitação de credenciamento"]},{"cells":["Solicitação 4","02-Jan-2021","Solicitação de credenciamento"]}],"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:1"},"result":{"status":"pending","error_message":"TODO (Cucumber::Pending)\n./features/step_definitions/credenciamento_professores_steps.rb:2:in `\"que os seguintes solicitações estejam pendentes:\"'\nfeatures/gerenciar_solicitacoes_credenciamento.feature:10:in `Dado que os seguintes solicitações estejam pendentes:'","duration":8013000}},{"keyword":"E ","name":"que eu estou cadastrado e logado como \"Gabriel\", \"gabriel@admin.com\", \"gabriel123\", \"administrator\", \"200000000\"","line":17,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:8"},"result":{"status":"skipped"}},{"keyword":"E ","name":"que eu estou na página de solicitações de credenciamento","line":18,"match":{"location":"features/gerenciar_solicitacoes_credenciamento.feature:18"},"result":{"status":"undefined"}}]},{"id":"gerenciar-solicitações-de-credenciamento;aceitar-uma-solicitação-de-credenciamento","keyword":"Cenário","name":"Aceitar uma solicitação de credenciamento","description":"","line":20,"type":"scenario","steps":[{"keyword":"Quando ","name":"eu clico em \"Solicitação 1\"","line":21,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:34"},"result":{"status":"skipped"}},{"keyword":"Então ","name":"eu devo estar na página da \"Solicitação 1\"","line":22,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:38"},"result":{"status":"skipped"}},{"keyword":"Quando ","name":"eu clico em \"Aprovar\"","line":23,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:34"},"result":{"status":"skipped"}},{"keyword":"Então ","name":"eu devo estar na página de solicitações de credenciamento","line":24,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:38"},"result":{"status":"skipped"}},{"keyword":"Quando ","name":"eu desmarco os seguintes estados: Rejeitadas, Reformulação","line":25,"match":{"location":"features/gerenciar_solicitacoes_credenciamento.feature:25"},"result":{"status":"undefined"}},{"keyword":"E ","name":"eu marco os seguintes estados: Aprovadas","line":26,"match":{"location":"features/gerenciar_solicitacoes_credenciamento.feature:26"},"result":{"status":"undefined"}},{"keyword":"E ","name":"aperto 'Atualizar'","line":27,"match":{"location":"features/gerenciar_solicitacoes_credenciamento.feature:27"},"result":{"status":"undefined"}},{"keyword":"Então ","name":"eu devo ver \"Solicitação 1\"","line":28,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:63"},"result":{"status":"skipped"}}],"after":[{"embeddings":[{"mime_type":"image/png","data":"bG9nL3NjcmVlbnNob3RzL2FjZWl0YXJ1bWFzb2xpY2l0YW9kZWNyZWRlbmNpYW1lbnRvLnBuZw=="}],"match":{"location":"features/support/hooks.rb:1"},"result":{"status":"passed","duration":173000}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:10"},"result":{"status":"passed","duration":16300}}]},{"keyword":"Contexto","name":"","description":"","line":9,"type":"background","before":[{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:14"},"result":{"status":"passed","duration":11100}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:22"},"result":{"status":"passed","duration":12000}}],"steps":[{"keyword":"Dado ","name":"que os seguintes solicitações estejam pendentes:","line":10,"rows":[{"cells":["title","due_date","activity_type_id"]},{"cells":["Solicitação 1","02-Jan-2021","Solicitação de credenciamento"]},{"cells":["Solicitação 2","02-Jan-2021","Solicitação de credenciamento"]},{"cells":["Solicitação 3","02-Jan-2021","Solicitação de credenciamento"]},{"cells":["Solicitação 4","02-Jan-2021","Solicitação de credenciamento"]}],"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:1"},"result":{"status":"pending","error_message":"TODO (Cucumber::Pending)\n./features/step_definitions/credenciamento_professores_steps.rb:2:in `\"que os seguintes solicitações estejam pendentes:\"'\nfeatures/gerenciar_solicitacoes_credenciamento.feature:10:in `Dado que os seguintes solicitações estejam pendentes:'","duration":158300}},{"keyword":"E ","name":"que eu estou cadastrado e logado como \"Gabriel\", \"gabriel@admin.com\", \"gabriel123\", \"administrator\", \"200000000\"","line":17,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:8"},"result":{"status":"skipped"}},{"keyword":"E ","name":"que eu estou na página de solicitações de credenciamento","line":18,"match":{"location":"features/gerenciar_solicitacoes_credenciamento.feature:18"},"result":{"status":"undefined"}}]},{"id":"gerenciar-solicitações-de-credenciamento;recusar-uma-solicitação-de-credenciamento","keyword":"Cenário","name":"Recusar uma solicitação de credenciamento","description":"","line":30,"type":"scenario","steps":[{"keyword":"Quando ","name":"eu clico em \"Solicitação 2\"","line":31,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:34"},"result":{"status":"skipped"}},{"keyword":"Então ","name":"eu devo estar na página da \"Solicitação 2\"","line":32,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:38"},"result":{"status":"skipped"}},{"keyword":"Quando ","name":"eu clico em \"Rejeitar\"","line":33,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:34"},"result":{"status":"skipped"}},{"keyword":"Então ","name":"eu devo estar na página de solicitações de credenciamento","line":34,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:38"},"result":{"status":"skipped"}},{"keyword":"Quando ","name":"eu desmarco os seguintes estados: Aprovadas, Reformulação","line":35,"match":{"location":"features/gerenciar_solicitacoes_credenciamento.feature:35"},"result":{"status":"undefined"}},{"keyword":"E ","name":"eu marco os seguintes estados: Rejeitadas","line":36,"match":{"location":"features/gerenciar_solicitacoes_credenciamento.feature:36"},"result":{"status":"undefined"}},{"keyword":"E ","name":"aperto 'Atualizar'","line":37,"match":{"location":"features/gerenciar_solicitacoes_credenciamento.feature:37"},"result":{"status":"undefined"}},{"keyword":"Então ","name":"eu devo ver \"Solicitação 2\"","line":38,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:63"},"result":{"status":"skipped"}}],"after":[{"embeddings":[{"mime_type":"image/png","data":"bG9nL3NjcmVlbnNob3RzL3JlY3VzYXJ1bWFzb2xpY2l0YW9kZWNyZWRlbmNpYW1lbnRvLnBuZw=="}],"match":{"location":"features/support/hooks.rb:1"},"result":{"status":"passed","duration":244100}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:10"},"result":{"status":"passed","duration":22100}}]}]},{"uri":"features/spike.feature","id":"testar","keyword":"Funcionalidade","name":"Testar","description":"","line":4,"comments":[{"value":"#encoding: utf-8","line":2}],"elements":[{"id":"testar;","keyword":"Cenário","name":"","description":"","line":5,"type":"scenario","before":[{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:14"},"result":{"status":"passed","duration":12300}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:22"},"result":{"status":"passed","duration":9900}}],"steps":[{"keyword":"Dado ","name":"que eu estou cadastrado e logado como \"Gabriel\", \"gabriel@admin.com\", \"gabriel123\", \"administrator\", \"200000000\"","line":6,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:8"},"result":{"status":"passed","duration":2499355600}}],"after":[{"embeddings":[{"mime_type":"image/png","data":"bG9nL3NjcmVlbnNob3RzLy5wbmc="}],"match":{"location":"features/support/hooks.rb:1"},"result":{"status":"passed","duration":182300}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:10"},"result":{"status":"passed","duration":18100}}]}]}] \ No newline at end of file +[{"uri":"features/abrir_solicitacao_credenciamento.feature","id":"abrir-solicitação-de-credenciamento","keyword":"Funcionalidade","name":"Abrir solicitação de credenciamento","description":" Como professor autenticado no sistema,\n Quero poder abrir uma solicitação de credenciamento\n Para que eu possa ser um professor credenciado","line":4,"comments":[{"value":"#encoding: utf-8","line":2}],"elements":[{"keyword":"Contexto","name":"","description":"","line":9,"type":"background","before":[{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:14"},"result":{"status":"passed","duration":31300}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:22"},"result":{"status":"passed","duration":19200}}],"steps":[{"keyword":"Dado ","name":"que eu estou cadastrado e logado como \"Lucas\", \"lucas@professor.com\", \"lucas123\", \"professor\", \"200000000\"","line":10,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:8"},"result":{"status":"passed","duration":2212292400}},{"keyword":"E ","name":"que eu estou na página de abrir solicitação de credenciamento","line":11,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:30"},"result":{"status":"failed","error_message":"Can't find mapping from \"de abrir solicitação de credenciamento\" to a path.\nNow, go and add a mapping in /mnt/c/Users/Fontenelle/Desktop/UnB/9 semestre/Engenharia de Software/secretaria_ppgi/features/support/paths.rb (RuntimeError)\n./features/support/paths.rb:31:in `rescue in path_to'\n./features/support/paths.rb:26:in `path_to'\n./features/step_definitions/credenciamento_professores_steps.rb:31:in `/^que eu estou na página (.+)$/'\nfeatures/abrir_solicitacao_credenciamento.feature:11:in `E que eu estou na página de abrir solicitação de credenciamento'","duration":163700}}]},{"id":"abrir-solicitação-de-credenciamento;solicitação-enviada-com-sucesso","keyword":"Cenário","name":"Solicitação enviada com sucesso","description":"","line":13,"type":"scenario","steps":[{"keyword":"Quando ","name":"eu anexo o arquivo \"Formulário de Credenciamento.pdf\" no campo 'Formulario'","line":14,"match":{"location":"features/abrir_solicitacao_credenciamento.feature:14"},"result":{"status":"undefined"}},{"keyword":"E ","name":"eu anexo o arquivo \"CV Lattes.pdf\" em 'CV Lattes'","line":15,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:34"},"result":{"status":"skipped"}},{"keyword":"E ","name":"eu clico em 'Enviar'","line":16,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:38"},"result":{"status":"skipped"}},{"keyword":"Então ","name":"eu devo ver \"Solicitação enviada com sucesso\"","line":17,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:67"},"result":{"status":"skipped"}}],"after":[{"embeddings":[{"mime_type":"image/png","data":"bG9nL3NjcmVlbnNob3RzL3NvbGljaXRhb2VudmlhZGFjb21zdWNlc3NvLnBuZw=="}],"match":{"location":"features/support/hooks.rb:1"},"result":{"status":"failed","error_message":"undefined method `manage' for #\u003cCapybara::RackTest::Browser:0x00007fffcd7263a0\u003e (NoMethodError)\n./features/support/hooks.rb:22:in `add_browser_logs'\n./features/support/hooks.rb:5:in `After'","duration":367500}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:10"},"result":{"status":"passed","duration":24900}}]},{"keyword":"Contexto","name":"","description":"","line":9,"type":"background","before":[{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:14"},"result":{"status":"passed","duration":11000}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:22"},"result":{"status":"passed","duration":9200}}],"steps":[{"keyword":"Dado ","name":"que eu estou cadastrado e logado como \"Lucas\", \"lucas@professor.com\", \"lucas123\", \"professor\", \"200000000\"","line":10,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:8"},"result":{"status":"passed","duration":36932100}},{"keyword":"E ","name":"que eu estou na página de abrir solicitação de credenciamento","line":11,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:30"},"result":{"status":"failed","error_message":"Can't find mapping from \"de abrir solicitação de credenciamento\" to a path.\nNow, go and add a mapping in /mnt/c/Users/Fontenelle/Desktop/UnB/9 semestre/Engenharia de Software/secretaria_ppgi/features/support/paths.rb (RuntimeError)\n./features/support/paths.rb:31:in `rescue in path_to'\n./features/support/paths.rb:26:in `path_to'\n./features/step_definitions/credenciamento_professores_steps.rb:31:in `/^que eu estou na página (.+)$/'\nfeatures/abrir_solicitacao_credenciamento.feature:11:in `E que eu estou na página de abrir solicitação de credenciamento'","duration":125900}}]},{"id":"abrir-solicitação-de-credenciamento;solicitação-não-enviada-(campo-obrigatório-em-branco)","keyword":"Cenário","name":"Solicitação não enviada (campo obrigatório em branco)","description":"","line":19,"type":"scenario","steps":[{"keyword":"Quando ","name":"eu anexo o arquivo \"Formulário de Credenciamento.pdf\" no campo 'Formulario'","line":20,"match":{"location":"features/abrir_solicitacao_credenciamento.feature:20"},"result":{"status":"undefined"}},{"keyword":"E ","name":"eu clico em 'Enviar'","line":21,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:38"},"result":{"status":"skipped"}},{"keyword":"Então ","name":"eu devo ver \"Solicitação não enviada (campo obrigatório* em branco)\"","line":22,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:67"},"result":{"status":"skipped"}}],"after":[{"embeddings":[{"mime_type":"image/png","data":"bG9nL3NjcmVlbnNob3RzL3NvbGljaXRhb25vZW52aWFkYWNhbXBvb2JyaWdhdHJpb2VtYnJhbmNvLnBuZw=="}],"match":{"location":"features/support/hooks.rb:1"},"result":{"status":"failed","error_message":"undefined method `manage' for #\u003cCapybara::RackTest::Browser:0x00007fffce93fbb8\u003e (NoMethodError)\n./features/support/hooks.rb:22:in `add_browser_logs'\n./features/support/hooks.rb:5:in `After'","duration":1180900}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:10"},"result":{"status":"passed","duration":20800}}]}]},{"uri":"features/credenciamento_periodo.feature","id":"definir-o-prazo-de-credenciamento-dos-professores","keyword":"Funcionalidade","name":"Definir o prazo de credenciamento dos professores","description":" Como um administrador,\n para que eu possa credenciar os professores,\n eu gostaria de definir o prazo de credenciamento dos professores","line":4,"comments":[{"value":"#encoding: utf-8","line":2}],"elements":[{"keyword":"Contexto","name":"","description":"","line":9,"type":"background","before":[{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:14"},"result":{"status":"passed","duration":11000}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:22"},"result":{"status":"passed","duration":8700}}],"steps":[{"keyword":"Dado ","name":"que eu esteja autenticado como usuario \"admin\"","line":10,"match":{"location":"features/credenciamento_periodo.feature:10"},"result":{"status":"undefined"}},{"keyword":"E ","name":"que esteja na página de credenciamento","line":11,"match":{"location":"features/credenciamento_periodo.feature:11"},"result":{"status":"undefined"}}]},{"id":"definir-o-prazo-de-credenciamento-dos-professores;definir-prazo-de-credenciamento-sem-data","keyword":"Cenário","name":"Definir prazo de credenciamento sem data","description":"","line":13,"type":"scenario","steps":[{"keyword":"Quando ","name":"eu aperto o botão \"Definir prazo de credenciamento\"","line":14,"match":{"location":"features/credenciamento_periodo.feature:14"},"result":{"status":"undefined"}},{"keyword":"E ","name":"eu aperto o botão \"Salvar período\"","line":15,"match":{"location":"features/credenciamento_periodo.feature:15"},"result":{"status":"undefined"}},{"keyword":"Então ","name":"eu espero ver a mensagem \"Insira uma data de início e uma data de término válidas.\"","line":16,"match":{"location":"features/credenciamento_periodo.feature:16"},"result":{"status":"undefined"}}],"after":[{"embeddings":[{"mime_type":"image/png","data":"bG9nL3NjcmVlbnNob3RzL2RlZmluaXJwcmF6b2RlY3JlZGVuY2lhbWVudG9zZW1kYXRhLnBuZw=="}],"match":{"location":"features/support/hooks.rb:1"},"result":{"status":"passed","duration":217700}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:10"},"result":{"status":"passed","duration":34100}}]},{"keyword":"Contexto","name":"","description":"","line":9,"type":"background","before":[{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:14"},"result":{"status":"passed","duration":12100}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:22"},"result":{"status":"passed","duration":21000}}],"steps":[{"keyword":"Dado ","name":"que eu esteja autenticado como usuario \"admin\"","line":10,"match":{"location":"features/credenciamento_periodo.feature:10"},"result":{"status":"undefined"}},{"keyword":"E ","name":"que esteja na página de credenciamento","line":11,"match":{"location":"features/credenciamento_periodo.feature:11"},"result":{"status":"undefined"}}]},{"id":"definir-o-prazo-de-credenciamento-dos-professores;definir-prazo-de-credenciamento-com-data","keyword":"Cenário","name":"Definir prazo de credenciamento com data","description":"","line":18,"type":"scenario","steps":[{"keyword":"Quando ","name":"eu aperto o botão \"Definir prazo de credenciamento\"","line":19,"match":{"location":"features/credenciamento_periodo.feature:19"},"result":{"status":"undefined"}},{"keyword":"Quando ","name":"eu adiciono um valor \"Início\" para \"Data de Início\"","line":20,"match":{"location":"features/credenciamento_periodo.feature:20"},"result":{"status":"undefined"}},{"keyword":"E ","name":"eu adiciono um valor \"Término\" para \"Data de Término\"","line":21,"match":{"location":"features/credenciamento_periodo.feature:21"},"result":{"status":"undefined"}},{"keyword":"E ","name":"eu aperto o botão \"Salvar período\"","line":22,"match":{"location":"features/credenciamento_periodo.feature:22"},"result":{"status":"undefined"}},{"keyword":"Então ","name":"eu espero ver a mensagem \"Prazo cadastrado com sucesso.\"","line":23,"match":{"location":"features/credenciamento_periodo.feature:23"},"result":{"status":"undefined"}}],"after":[{"embeddings":[{"mime_type":"image/png","data":"bG9nL3NjcmVlbnNob3RzL2RlZmluaXJwcmF6b2RlY3JlZGVuY2lhbWVudG9jb21kYXRhLnBuZw=="}],"match":{"location":"features/support/hooks.rb:1"},"result":{"status":"passed","duration":219300}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:10"},"result":{"status":"passed","duration":23100}}]}]},{"uri":"features/gerenciar_solicitacoes_credenciamento.feature","id":"gerenciar-solicitações-de-credenciamento","keyword":"Funcionalidade","name":"Gerenciar solicitações de credenciamento","description":" Como um admnistrador do sistema\n Quero visualizar uma solicitação de credencimento em aberto\n Para decidir se vou aceitar ou recusar tal solicitação","line":4,"comments":[{"value":"#encoding: utf-8","line":2}],"elements":[{"keyword":"Contexto","name":"","description":"","line":9,"type":"background","before":[{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:14"},"result":{"status":"passed","duration":12900}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:22"},"result":{"status":"passed","duration":9800}}],"steps":[{"keyword":"Dado ","name":"que as seguintes solicitações estejam pendentes:","line":10,"rows":[{"cells":["title","due_date","activity_type_id"]},{"cells":["Solicitação 1","02-Jan-2021","Solicitação de credenciamento"]},{"cells":["Solicitação 2","02-Jan-2021","Solicitação de credenciamento"]},{"cells":["Solicitação 3","02-Jan-2021","Solicitação de credenciamento"]},{"cells":["Solicitação 4","02-Jan-2021","Solicitação de credenciamento"]}],"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:1"},"result":{"status":"pending","error_message":"TODO (Cucumber::Pending)\n./features/step_definitions/credenciamento_professores_steps.rb:2:in `\"que as seguintes solicitações estejam pendentes:\"'\nfeatures/gerenciar_solicitacoes_credenciamento.feature:10:in `Dado que as seguintes solicitações estejam pendentes:'","duration":496800}},{"keyword":"E ","name":"que eu estou cadastrado e logado como \"Gabriel\", \"gabriel@admin.com\", \"gabriel123\", \"administrator\", \"200000000\"","line":17,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:8"},"result":{"status":"skipped"}},{"keyword":"E ","name":"que eu estou na página de solicitações de credenciamento","line":18,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:30"},"result":{"status":"skipped"}}]},{"id":"gerenciar-solicitações-de-credenciamento;aceitar-uma-solicitação-de-credenciamento","keyword":"Cenário","name":"Aceitar uma solicitação de credenciamento","description":"","line":20,"type":"scenario","steps":[{"keyword":"Quando ","name":"eu clico em \"Solicitação 1\"","line":21,"match":{"location":"features/gerenciar_solicitacoes_credenciamento.feature:21"},"result":{"status":"undefined"}},{"keyword":"Então ","name":"eu devo estar na página da \"Solicitação 1\"","line":22,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:42"},"result":{"status":"skipped"}},{"keyword":"Quando ","name":"eu clico em 'Aprovar'","line":23,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:38"},"result":{"status":"skipped"}},{"keyword":"Então ","name":"eu devo estar na página de solicitações de credenciamento","line":24,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:42"},"result":{"status":"skipped"}},{"keyword":"Quando ","name":"eu desmarco os seguintes estados: Rejeitadas, Reformulação","line":25,"match":{"location":"features/gerenciar_solicitacoes_credenciamento.feature:25"},"result":{"status":"undefined"}},{"keyword":"E ","name":"eu marco os seguintes estados: Aprovadas","line":26,"match":{"location":"features/gerenciar_solicitacoes_credenciamento.feature:26"},"result":{"status":"undefined"}},{"keyword":"E ","name":"eu aperto 'Atualizar'","line":27,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:63"},"result":{"status":"skipped"}},{"keyword":"Então ","name":"eu devo ver \"Solicitação 1\"","line":28,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:67"},"result":{"status":"skipped"}}],"after":[{"embeddings":[{"mime_type":"image/png","data":"bG9nL3NjcmVlbnNob3RzL2FjZWl0YXJ1bWFzb2xpY2l0YW9kZWNyZWRlbmNpYW1lbnRvLnBuZw=="}],"match":{"location":"features/support/hooks.rb:1"},"result":{"status":"passed","duration":220200}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:10"},"result":{"status":"passed","duration":25200}}]},{"keyword":"Contexto","name":"","description":"","line":9,"type":"background","before":[{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:14"},"result":{"status":"passed","duration":15900}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:22"},"result":{"status":"passed","duration":12000}}],"steps":[{"keyword":"Dado ","name":"que as seguintes solicitações estejam pendentes:","line":10,"rows":[{"cells":["title","due_date","activity_type_id"]},{"cells":["Solicitação 1","02-Jan-2021","Solicitação de credenciamento"]},{"cells":["Solicitação 2","02-Jan-2021","Solicitação de credenciamento"]},{"cells":["Solicitação 3","02-Jan-2021","Solicitação de credenciamento"]},{"cells":["Solicitação 4","02-Jan-2021","Solicitação de credenciamento"]}],"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:1"},"result":{"status":"pending","error_message":"TODO (Cucumber::Pending)\n./features/step_definitions/credenciamento_professores_steps.rb:2:in `\"que as seguintes solicitações estejam pendentes:\"'\nfeatures/gerenciar_solicitacoes_credenciamento.feature:10:in `Dado que as seguintes solicitações estejam pendentes:'","duration":147300}},{"keyword":"E ","name":"que eu estou cadastrado e logado como \"Gabriel\", \"gabriel@admin.com\", \"gabriel123\", \"administrator\", \"200000000\"","line":17,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:8"},"result":{"status":"skipped"}},{"keyword":"E ","name":"que eu estou na página de solicitações de credenciamento","line":18,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:30"},"result":{"status":"skipped"}}]},{"id":"gerenciar-solicitações-de-credenciamento;recusar-uma-solicitação-de-credenciamento","keyword":"Cenário","name":"Recusar uma solicitação de credenciamento","description":"","line":30,"type":"scenario","steps":[{"keyword":"Quando ","name":"eu clico em \"Solicitação 2\"","line":31,"match":{"location":"features/gerenciar_solicitacoes_credenciamento.feature:31"},"result":{"status":"undefined"}},{"keyword":"Então ","name":"eu devo estar na página da \"Solicitação 2\"","line":32,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:42"},"result":{"status":"skipped"}},{"keyword":"Quando ","name":"eu clico em 'Rejeitar'","line":33,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:38"},"result":{"status":"skipped"}},{"keyword":"Então ","name":"eu devo estar na página de solicitações de credenciamento","line":34,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:42"},"result":{"status":"skipped"}},{"keyword":"Quando ","name":"eu desmarco os seguintes estados: Aprovadas, Reformulação","line":35,"match":{"location":"features/gerenciar_solicitacoes_credenciamento.feature:35"},"result":{"status":"undefined"}},{"keyword":"E ","name":"eu marco os seguintes estados: Rejeitadas","line":36,"match":{"location":"features/gerenciar_solicitacoes_credenciamento.feature:36"},"result":{"status":"undefined"}},{"keyword":"E ","name":"eu aperto 'Atualizar'","line":37,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:63"},"result":{"status":"skipped"}},{"keyword":"Então ","name":"eu devo ver \"Solicitação 2\"","line":38,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:67"},"result":{"status":"skipped"}}],"after":[{"embeddings":[{"mime_type":"image/png","data":"bG9nL3NjcmVlbnNob3RzL3JlY3VzYXJ1bWFzb2xpY2l0YW9kZWNyZWRlbmNpYW1lbnRvLnBuZw=="}],"match":{"location":"features/support/hooks.rb:1"},"result":{"status":"passed","duration":191900}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:10"},"result":{"status":"passed","duration":25600}}]}]},{"uri":"features/requisitos_necessarios.feature","id":"disponibilizar-os-requisitos-necessarios-para-credenciamento-de-professores","keyword":"Funcionalidade","name":"Disponibilizar os requisitos necessarios para credenciamento de professores","description":" Como administrador autenticado no sistema,\n Quero poder disponibilizar para os professores os requisitos necessários para o credenciamento\n Para que eles possam dar procedimento ao credenciamento","line":4,"comments":[{"value":"#encoding: utf-8","line":2}],"elements":[{"keyword":"Contexto","name":"","description":"","line":9,"type":"background","before":[{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:14"},"result":{"status":"passed","duration":12000}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:22"},"result":{"status":"passed","duration":12700}}],"steps":[{"keyword":"Dado ","name":"que eu esteja logado como administrador de email \"gp@admin.com\" e senha \"123\"","line":10,"match":{"location":"features/requisitos_necessarios.feature:10"},"result":{"status":"undefined"}},{"keyword":"E ","name":"não existem requisitos selecionados na página principal","line":11,"match":{"location":"features/requisitos_necessarios.feature:11"},"result":{"status":"undefined"}},{"keyword":"Quando ","name":"o administrador clicou no link para alterar documentos necessários para credenciamento","line":12,"match":{"location":"features/requisitos_necessarios.feature:12"},"result":{"status":"undefined"}}]},{"id":"disponibilizar-os-requisitos-necessarios-para-credenciamento-de-professores;os-campos-puderam-ser-selecionados","keyword":"Cenário","name":"Os campos puderam ser selecionados","description":"","line":14,"type":"scenario","steps":[{"keyword":"Quando ","name":"eu selecionar os campos","line":15,"match":{"location":"features/requisitos_necessarios.feature:15"},"result":{"status":"undefined"}},{"keyword":"E ","name":"eu clicar no botão atualizar requisitos","line":16,"match":{"location":"features/requisitos_necessarios.feature:16"},"result":{"status":"undefined"}},{"keyword":"Então ","name":"eu devo voltar para a página principal aonde aparece meus requisitos selecionados","line":17,"match":{"location":"features/requisitos_necessarios.feature:17"},"result":{"status":"undefined"}}],"after":[{"embeddings":[{"mime_type":"image/png","data":"bG9nL3NjcmVlbnNob3RzL29zY2FtcG9zcHVkZXJhbXNlcnNlbGVjaW9uYWRvcy5wbmc="}],"match":{"location":"features/support/hooks.rb:1"},"result":{"status":"passed","duration":2373100}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:10"},"result":{"status":"passed","duration":40300}}]},{"keyword":"Contexto","name":"","description":"","line":9,"type":"background","before":[{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:14"},"result":{"status":"passed","duration":15100}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:22"},"result":{"status":"passed","duration":9600}}],"steps":[{"keyword":"Dado ","name":"que eu esteja logado como administrador de email \"gp@admin.com\" e senha \"123\"","line":10,"match":{"location":"features/requisitos_necessarios.feature:10"},"result":{"status":"undefined"}},{"keyword":"E ","name":"não existem requisitos selecionados na página principal","line":11,"match":{"location":"features/requisitos_necessarios.feature:11"},"result":{"status":"undefined"}},{"keyword":"Quando ","name":"o administrador clicou no link para alterar documentos necessários para credenciamento","line":12,"match":{"location":"features/requisitos_necessarios.feature:12"},"result":{"status":"undefined"}}]},{"id":"disponibilizar-os-requisitos-necessarios-para-credenciamento-de-professores;não-houveram-mudanças-feitas","keyword":"Cenário","name":"Não houveram mudanças feitas","description":"","line":19,"type":"scenario","steps":[{"keyword":"Quando ","name":"eu não selecionar os campos","line":20,"match":{"location":"features/requisitos_necessarios.feature:20"},"result":{"status":"undefined"}},{"keyword":"E ","name":"eu clicar no botão atualizar requisitos","line":21,"match":{"location":"features/requisitos_necessarios.feature:21"},"result":{"status":"undefined"}},{"keyword":"Então ","name":"eu recebo uma mensagem dizendo que \"não houveram mudanças\"","line":22,"match":{"location":"features/requisitos_necessarios.feature:22"},"result":{"status":"undefined"}}],"after":[{"embeddings":[{"mime_type":"image/png","data":"bG9nL3NjcmVlbnNob3RzL25vaG91dmVyYW1tdWRhbmFzZmVpdGFzLnBuZw=="}],"match":{"location":"features/support/hooks.rb:1"},"result":{"status":"passed","duration":214700}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:10"},"result":{"status":"passed","duration":18600}}]}]},{"uri":"features/spike.feature","id":"testar","keyword":"Funcionalidade","name":"Testar","description":"","line":4,"comments":[{"value":"#encoding: utf-8","line":2}],"elements":[{"id":"testar;","keyword":"Cenário","name":"","description":"","line":5,"type":"scenario","before":[{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:14"},"result":{"status":"passed","duration":18600}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:22"},"result":{"status":"passed","duration":13400}}],"steps":[{"keyword":"Dado ","name":"que eu estou cadastrado e logado como \"Gabriel\", \"gabriel@admin.com\", \"gabriel123\", \"administrator\", \"200000000\"","line":6,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:8"},"result":{"status":"passed","duration":39523000}}],"after":[{"embeddings":[{"mime_type":"image/png","data":"bG9nL3NjcmVlbnNob3RzLy5wbmc="}],"match":{"location":"features/support/hooks.rb:1"},"result":{"status":"passed","duration":223700}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:10"},"result":{"status":"passed","duration":19100}}]}]}] \ No newline at end of file From af2d639157829b839200f79c6008a023a5d43ce8 Mon Sep 17 00:00:00 2001 From: ngsylar Date: Tue, 10 Nov 2020 23:05:30 -0300 Subject: [PATCH 13/36] migrations --- app/controllers/application_controller.rb | 4 +++ app/controllers/home_controller.rb | 14 ++++++++++ app/models/activity_type.rb | 3 ++ app/views/home/index.html.erb | 1 + .../20201111004338_create_activity_types.rb | 9 ++++++ .../20201111004340_create_activities.rb | 21 ++++++++++++++ db/schema.rb | 28 ++++++++++++++++++- spec/models/activity_type_spec.rb | 5 ++++ 8 files changed, 84 insertions(+), 1 deletion(-) create mode 100644 app/models/activity_type.rb create mode 100644 db/migrate/20201111004338_create_activity_types.rb create mode 100644 db/migrate/20201111004340_create_activities.rb create mode 100644 spec/models/activity_type_spec.rb diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 457cc5f9..ab623125 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -5,6 +5,10 @@ class ApplicationController < ActionController::Base protected + def is_admin? user_id + User.find(user_id).role == "administrator" + end + def configure_permitted_parameters devise_parameter_sanitizer.permit(:sign_up, keys: %i[full_name role]) end diff --git a/app/controllers/home_controller.rb b/app/controllers/home_controller.rb index 95f29929..bfea9d3a 100644 --- a/app/controllers/home_controller.rb +++ b/app/controllers/home_controller.rb @@ -1,4 +1,18 @@ class HomeController < ApplicationController + before_action :set_word, only: [:index] + def index + end + + private + + def set_word + if user_signed_in? && is_admin?(current_user.id) + @word = "Olá Genaína" + else + @word = "Olá impostor" + end + end + end diff --git a/app/models/activity_type.rb b/app/models/activity_type.rb new file mode 100644 index 00000000..2d5116ab --- /dev/null +++ b/app/models/activity_type.rb @@ -0,0 +1,3 @@ +class ActivityType < ApplicationRecord + +end diff --git a/app/views/home/index.html.erb b/app/views/home/index.html.erb index 33ba387d..83afd49c 100644 --- a/app/views/home/index.html.erb +++ b/app/views/home/index.html.erb @@ -2,6 +2,7 @@

Find me in app/views/home/index.html.erb

<% if user_signed_in? %> + <%= @word %>

Usuário atual

Nome: <%= current_user.full_name %>

Email: <%= current_user.email %>

diff --git a/db/migrate/20201111004338_create_activity_types.rb b/db/migrate/20201111004338_create_activity_types.rb new file mode 100644 index 00000000..5bd3eaeb --- /dev/null +++ b/db/migrate/20201111004338_create_activity_types.rb @@ -0,0 +1,9 @@ +class CreateActivityTypes < ActiveRecord::Migration[5.2] + def change + create_table :activity_types do |t| + t.string :title + + t.timestamps + end + end +end diff --git a/db/migrate/20201111004340_create_activities.rb b/db/migrate/20201111004340_create_activities.rb new file mode 100644 index 00000000..48cd51a3 --- /dev/null +++ b/db/migrate/20201111004340_create_activities.rb @@ -0,0 +1,21 @@ +class CreateActivities < ActiveRecord::Migration[5.2] + def change + create_table :activities do |t| + t.string :title + t.text :description + t.date :due_date + # t.attachment :documents + + t.references :activity_type, foreign_key: true + t.datetime :remember_created_at + t.timestamps null: false + end + + create_table :users_activities do |t| + t.references :user + t.references :activity + end + + add_index :users_activities, %i[user_id activity_id], unique: true + end +end diff --git a/db/schema.rb b/db/schema.rb index 96d61d72..507be0c2 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,11 +10,28 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 2019_11_14_163205) do +ActiveRecord::Schema.define(version: 2020_11_11_004340) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" + create_table "activities", force: :cascade do |t| + t.string "title" + t.text "description" + t.date "due_date" + t.bigint "activity_type_id" + t.datetime "remember_created_at" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["activity_type_id"], name: "index_activities_on_activity_type_id" + end + + create_table "activity_types", force: :cascade do |t| + t.string "title" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + end + create_table "users", force: :cascade do |t| t.string "email", default: "", null: false t.string "encrypted_password", default: "", null: false @@ -30,4 +47,13 @@ t.index ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true end + create_table "users_activities", force: :cascade do |t| + t.bigint "user_id" + t.bigint "activity_id" + t.index ["activity_id"], name: "index_users_activities_on_activity_id" + t.index ["user_id", "activity_id"], name: "index_users_activities_on_user_id_and_activity_id", unique: true + t.index ["user_id"], name: "index_users_activities_on_user_id" + end + + add_foreign_key "activities", "activity_types" end diff --git a/spec/models/activity_type_spec.rb b/spec/models/activity_type_spec.rb new file mode 100644 index 00000000..5541b8e6 --- /dev/null +++ b/spec/models/activity_type_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe ActivityType, type: :model do + pending "add some examples to (or delete) #{__FILE__}" +end From 878f1a646cd228fa9748002930e5e0e7ccf70e99 Mon Sep 17 00:00:00 2001 From: ngsylar Date: Wed, 11 Nov 2020 02:10:48 -0300 Subject: [PATCH 14/36] Migrations, Models and Steps --- app/controllers/home_controller.rb | 1 - app/models/activity.rb | 3 + app/models/activity_type.rb | 2 +- app/models/user_activity.rb | 4 + .../20201111004338_create_activity_types.rb | 2 - .../20201111004340_create_activities.rb | 8 +- db/schema.rb | 20 ++-- db/seeds.rb | 6 +- features.html | 96 +++---------------- ...enciar_solicitacoes_credenciamento.feature | 2 +- features/spike.feature | 7 +- .../credenciamento_professores_steps.rb | 18 +++- report.json | 2 +- 13 files changed, 59 insertions(+), 112 deletions(-) create mode 100644 app/models/activity.rb create mode 100644 app/models/user_activity.rb diff --git a/app/controllers/home_controller.rb b/app/controllers/home_controller.rb index bfea9d3a..357f457a 100644 --- a/app/controllers/home_controller.rb +++ b/app/controllers/home_controller.rb @@ -2,7 +2,6 @@ class HomeController < ApplicationController before_action :set_word, only: [:index] def index - end private diff --git a/app/models/activity.rb b/app/models/activity.rb new file mode 100644 index 00000000..757e8e51 --- /dev/null +++ b/app/models/activity.rb @@ -0,0 +1,3 @@ +class Activity < ApplicationRecord + validates :activity_type_id, presence: true +end diff --git a/app/models/activity_type.rb b/app/models/activity_type.rb index 2d5116ab..9258b1da 100644 --- a/app/models/activity_type.rb +++ b/app/models/activity_type.rb @@ -1,3 +1,3 @@ class ActivityType < ApplicationRecord - + validates :title, presence: true end diff --git a/app/models/user_activity.rb b/app/models/user_activity.rb new file mode 100644 index 00000000..eaf64d59 --- /dev/null +++ b/app/models/user_activity.rb @@ -0,0 +1,4 @@ +class UserActivity < ApplicationRecord + belongs_to :user + belongs_to :activity +end diff --git a/db/migrate/20201111004338_create_activity_types.rb b/db/migrate/20201111004338_create_activity_types.rb index 5bd3eaeb..5d9a226f 100644 --- a/db/migrate/20201111004338_create_activity_types.rb +++ b/db/migrate/20201111004338_create_activity_types.rb @@ -2,8 +2,6 @@ class CreateActivityTypes < ActiveRecord::Migration[5.2] def change create_table :activity_types do |t| t.string :title - - t.timestamps end end end diff --git a/db/migrate/20201111004340_create_activities.rb b/db/migrate/20201111004340_create_activities.rb index 48cd51a3..8b516bee 100644 --- a/db/migrate/20201111004340_create_activities.rb +++ b/db/migrate/20201111004340_create_activities.rb @@ -11,11 +11,11 @@ def change t.timestamps null: false end - create_table :users_activities do |t| - t.references :user - t.references :activity + create_table :user_activities do |t| + t.belongs_to :user, foreign_key: true + t.belongs_to :activity, foreign_key: true end - add_index :users_activities, %i[user_id activity_id], unique: true + add_index :user_activities, %i[user_id activity_id], unique: true end end diff --git a/db/schema.rb b/db/schema.rb index 507be0c2..cd357ca3 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -28,8 +28,14 @@ create_table "activity_types", force: :cascade do |t| t.string "title" - t.datetime "created_at", null: false - t.datetime "updated_at", null: false + end + + create_table "user_activities", force: :cascade do |t| + t.bigint "user_id" + t.bigint "activity_id" + t.index ["activity_id"], name: "index_user_activities_on_activity_id" + t.index ["user_id", "activity_id"], name: "index_user_activities_on_user_id_and_activity_id", unique: true + t.index ["user_id"], name: "index_user_activities_on_user_id" end create_table "users", force: :cascade do |t| @@ -47,13 +53,7 @@ t.index ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true end - create_table "users_activities", force: :cascade do |t| - t.bigint "user_id" - t.bigint "activity_id" - t.index ["activity_id"], name: "index_users_activities_on_activity_id" - t.index ["user_id", "activity_id"], name: "index_users_activities_on_user_id_and_activity_id", unique: true - t.index ["user_id"], name: "index_users_activities_on_user_id" - end - add_foreign_key "activities", "activity_types" + add_foreign_key "user_activities", "activities" + add_foreign_key "user_activities", "users" end diff --git a/db/seeds.rb b/db/seeds.rb index a5ddd2f6..94113f98 100644 --- a/db/seeds.rb +++ b/db/seeds.rb @@ -11,4 +11,8 @@ User.create(full_name: "Administrador", email: "admin@admin.com", password: "admin123", role: "administrator", registration: "000000000") User.create(full_name: "Secretário", email: "secretary@secretary.com", password: "admin123", role: "secretary", registration: "000000000") User.create(full_name: "Professor", email: "professor@professor.com", password: "admin123", role: "professor", registration: "000000000") -User.create(full_name: "Aluno", email: "student@student.com", password: "admin123", role: "student", registration: "000000000") \ No newline at end of file +User.create(full_name: "Aluno", email: "student@student.com", password: "admin123", role: "student", registration: "000000000") + +# Activities +ActivityType.destroy_all +Activity.destroy_all diff --git a/features.html b/features.html index 0c37612d..04b1344b 100644 --- a/features.html +++ b/features.html @@ -467,93 +467,19 @@ function makeYellow(element_id) { $('#'+element_id).css('background', '#FAF834'); $('#'+element_id).css('color', '#000000'); -}

Cucumber Features

Expand All

Collapse All

# language: pt
#encoding: utf-8

Funcionalidade: Abrir solicitação de credenciamento

Como professor autenticado no sistema,
Quero poder abrir uma solicitação de credenciamento
Para que eu possa ser um professor credenciado

Contexto

  1. Dado que eu estou cadastrado e logado como "Lucas", "lucas@professor.com", "lucas123", "professor", "200000000"
    features/step_definitions/credenciamento_professores_steps.rb:8
  2. E que eu estou na página de abrir solicitação de credenciamento
    features/step_definitions/credenciamento_professores_steps.rb:30
    Can't find mapping from "de abrir solicitação de credenciamento" to a path.
    -Now, go and add a mapping in /mnt/c/Users/Fontenelle/Desktop/UnB/9 semestre/Engenharia de Software/secretaria_ppgi/features/support/paths.rb
    ./features/support/paths.rb:31:in `rescue in path_to'
    -./features/support/paths.rb:26:in `path_to'
    -./features/step_definitions/credenciamento_professores_steps.rb:31:in `/^que eu estou na página (.+)$/'
    -features/abrir_solicitacao_credenciamento.feature:11:in `E que eu estou na página de abrir solicitação de credenciamento'
    29        self.send(path_components.push('path').join('_').to_sym)
    -30      rescue NoMethodError, ArgumentError
    -31        raise "Can't find mapping from \"#{page_name}\" to a path.\n" +
    -32          "Now, go and add a mapping in #{__FILE__}"
    -33      end
    -34# gem install syntax to get syntax highlighting
features/abrir_solicitacao_credenciamento.feature:13

Cenário: Solicitação enviada com sucesso

  1. Quando eu anexo o arquivo "Formulário de Credenciamento.pdf" no campo 'Formulario'
    features/abrir_solicitacao_credenciamento.feature:14
    Quando("eu anexo o arquivo {string} no campo {string}") do |string, string2|
    -  pending # Write code here that turns the phrase above into concrete actions
    -end
  2. E eu anexo o arquivo "CV Lattes.pdf" em 'CV Lattes'
    features/step_definitions/credenciamento_professores_steps.rb:34
  3. E eu clico em 'Enviar'
    features/step_definitions/credenciamento_professores_steps.rb:38
  4. Então eu devo ver "Solicitação enviada com sucesso"
    features/step_definitions/credenciamento_professores_steps.rb:67
  5. Print maroto :)
      -
    undefined method `manage' for #<Capybara::RackTest::Browser:0x00007fffcd7263a0> (NoMethodError)
    ./features/support/hooks.rb:22:in `add_browser_logs'
    +}

    Cucumber Features

    Expand All

    Collapse All

    # language: pt
    #encoding: utf-8

    Funcionalidade: Testar

    features/spike.feature:5

    Cenário:

    1. Dado que existam os seguintes credenciamentos sem prazo definido:
      features/step_definitions/credenciamento_professores_steps.rb:23
      title
      full_name
      Credenciamento 1
      Adalberto
      Credenciamento 2
      Mariano
      Credenciamento 3
      Joel
      Validation failed: User must exist (ActiveRecord::RecordInvalid)
      ./features/step_definitions/credenciamento_professores_steps.rb:28:in `block (2 levels) in 
      ' +./features/step_definitions/credenciamento_professores_steps.rb:25:in `each' +./features/step_definitions/credenciamento_professores_steps.rb:25:in `"que existam os seguintes credenciamentos sem prazo definido:"' +features/spike.feature:6:in `Dado que existam os seguintes credenciamentos sem prazo definido:'
      26        act_id = Activity.create!(title: row['title'], activity_type_id: type_id).id
      +27        usr_id = User.create!(full_name: row['full_name'], email: row['full_name']+"@professor.com", password: row['full_name']+"123", role: "professor", registration: "000000000").id
      +28        UserActivity.create!(activity_id: act_id)
      
      +29    end
      +30end
      +31# gem install syntax to get syntax highlighting
    2. E que eu esteja cadastrado e logado como "Gabriel", "gabriel@admin.com", "gabriel123", "administrator", "200000000"
      features/step_definitions/credenciamento_professores_steps.rb:32
    3. Print maroto :)
        +
      undefined method `manage' for #<Capybara::RackTest::Browser:0x00007fffd5be5c58> (NoMethodError)
      ./features/support/hooks.rb:22:in `add_browser_logs'
       ./features/support/hooks.rb:5:in `After'
      20    current_url = Capybara.current_url.to_s
       21    # Gather browser logs
       22    logs = page.driver.browser.manage.logs.get(:browser).map {|line| [line.level, line.message]}
      
       23   # Remove warnings and info messages
       24    logs.reject! { |line| ['WARNING', 'INFO'].include?(line.first) }
      -25# gem install syntax to get syntax highlighting
    features/abrir_solicitacao_credenciamento.feature:19

    Cenário: Solicitação não enviada (campo obrigatório em branco)

    1. Quando eu anexo o arquivo "Formulário de Credenciamento.pdf" no campo 'Formulario'
      features/abrir_solicitacao_credenciamento.feature:20
      Quando("eu anexo o arquivo {string} no campo {string}") do |string, string2|
      -  pending # Write code here that turns the phrase above into concrete actions
      -end
    2. E eu clico em 'Enviar'
      features/step_definitions/credenciamento_professores_steps.rb:38
    3. Então eu devo ver "Solicitação não enviada (campo obrigatório* em branco)"
      features/step_definitions/credenciamento_professores_steps.rb:67
    4. Print maroto :)
        -
      undefined method `manage' for #<Capybara::RackTest::Browser:0x00007fffce93fbb8> (NoMethodError)
      ./features/support/hooks.rb:22:in `add_browser_logs'
      -./features/support/hooks.rb:5:in `After'
      20    current_url = Capybara.current_url.to_s
      -21    # Gather browser logs
      -22    logs = page.driver.browser.manage.logs.get(:browser).map {|line| [line.level, line.message]}
      
      -23   # Remove warnings and info messages
      -24    logs.reject! { |line| ['WARNING', 'INFO'].include?(line.first) }
      -25# gem install syntax to get syntax highlighting
    # language: pt
    #encoding: utf-8

    Funcionalidade: Definir o prazo de credenciamento dos professores

    Como um administrador,
    para que eu possa credenciar os professores,
    eu gostaria de definir o prazo de credenciamento dos professores

    Contexto

    1. Dado que eu esteja autenticado como usuario "admin"
      features/credenciamento_periodo.feature:10
      Dado("que eu esteja autenticado como usuario {string}") do |string|
      -  pending # Write code here that turns the phrase above into concrete actions
      -end
    2. E que esteja na página de credenciamento
      features/credenciamento_periodo.feature:11
      Dado("que esteja na página de credenciamento") do
      -  pending # Write code here that turns the phrase above into concrete actions
      -end
    features/credenciamento_periodo.feature:13

    Cenário: Definir prazo de credenciamento sem data

    1. Quando eu aperto o botão "Definir prazo de credenciamento"
      features/credenciamento_periodo.feature:14
      Quando("eu aperto o botão {string}") do |string|
      -  pending # Write code here that turns the phrase above into concrete actions
      -end
    2. E eu aperto o botão "Salvar período"
      features/credenciamento_periodo.feature:15
      Quando("eu aperto o botão {string}") do |string|
      -  pending # Write code here that turns the phrase above into concrete actions
      -end
    3. Então eu espero ver a mensagem "Insira uma data de início e uma data de término válidas."
      features/credenciamento_periodo.feature:16
      Então("eu espero ver a mensagem {string}") do |string|
      -  pending # Write code here that turns the phrase above into concrete actions
      -end
    4. Print maroto :)
        -
    features/credenciamento_periodo.feature:18

    Cenário: Definir prazo de credenciamento com data

    1. Quando eu aperto o botão "Definir prazo de credenciamento"
      features/credenciamento_periodo.feature:19
      Quando("eu aperto o botão {string}") do |string|
      -  pending # Write code here that turns the phrase above into concrete actions
      -end
    2. Quando eu adiciono um valor "Início" para "Data de Início"
      features/credenciamento_periodo.feature:20
      Quando("eu adiciono um valor {string} para {string}") do |string, string2|
      -  pending # Write code here that turns the phrase above into concrete actions
      -end
    3. E eu adiciono um valor "Término" para "Data de Término"
      features/credenciamento_periodo.feature:21
      Quando("eu adiciono um valor {string} para {string}") do |string, string2|
      -  pending # Write code here that turns the phrase above into concrete actions
      -end
    4. E eu aperto o botão "Salvar período"
      features/credenciamento_periodo.feature:22
      Quando("eu aperto o botão {string}") do |string|
      -  pending # Write code here that turns the phrase above into concrete actions
      -end
    5. Então eu espero ver a mensagem "Prazo cadastrado com sucesso."
      features/credenciamento_periodo.feature:23
      Então("eu espero ver a mensagem {string}") do |string|
      -  pending # Write code here that turns the phrase above into concrete actions
      -end
    6. Print maroto :)
        -
    # language: pt
    #encoding: utf-8

    Funcionalidade: Gerenciar solicitações de credenciamento

    Como um admnistrador do sistema
    Quero visualizar uma solicitação de credencimento em aberto
    Para decidir se vou aceitar ou recusar tal solicitação

    Contexto

    1. Dado que as seguintes solicitações estejam pendentes:
      features/step_definitions/credenciamento_professores_steps.rb:1
      title
      due_date
      activity_type_id
      Solicitação 1
      02-Jan-2021
      Solicitação de credenciamento
      Solicitação 2
      02-Jan-2021
      Solicitação de credenciamento
      Solicitação 3
      02-Jan-2021
      Solicitação de credenciamento
      Solicitação 4
      02-Jan-2021
      Solicitação de credenciamento
      TODO (Cucumber::Pending)
      ./features/step_definitions/credenciamento_professores_steps.rb:2:in `"que as seguintes solicitações estejam pendentes:"'
      -features/gerenciar_solicitacoes_credenciamento.feature:10:in `Dado que as seguintes solicitações estejam pendentes:'
      0Dado "que as seguintes solicitações estejam pendentes:" do |table|
      -1    pending
      -2    # table.hashes.each do |row|
      
      -3    #     Activity.create!(row)
      -4# gem install syntax to get syntax highlighting
    2. E que eu estou cadastrado e logado como "Gabriel", "gabriel@admin.com", "gabriel123", "administrator", "200000000"
      features/step_definitions/credenciamento_professores_steps.rb:8
    3. E que eu estou na página de solicitações de credenciamento
      features/step_definitions/credenciamento_professores_steps.rb:30
    features/gerenciar_solicitacoes_credenciamento.feature:20

    Cenário: Aceitar uma solicitação de credenciamento

    1. Quando eu clico em "Solicitação 1"
      features/gerenciar_solicitacoes_credenciamento.feature:21
      Quando("eu clico em {string}") do |string|
      -  pending # Write code here that turns the phrase above into concrete actions
      -end
    2. Então eu devo estar na página da "Solicitação 1"
      features/step_definitions/credenciamento_professores_steps.rb:42
    3. Quando eu clico em 'Aprovar'
      features/step_definitions/credenciamento_professores_steps.rb:38
    4. Então eu devo estar na página de solicitações de credenciamento
      features/step_definitions/credenciamento_professores_steps.rb:42
    5. Quando eu desmarco os seguintes estados: Rejeitadas, Reformulação
      features/gerenciar_solicitacoes_credenciamento.feature:25
      Quando("eu desmarco os seguintes estados: Rejeitadas, Reformulação") do
      -  pending # Write code here that turns the phrase above into concrete actions
      -end
    6. E eu marco os seguintes estados: Aprovadas
      features/gerenciar_solicitacoes_credenciamento.feature:26
      Quando("eu marco os seguintes estados: Aprovadas") do
      -  pending # Write code here that turns the phrase above into concrete actions
      -end
    7. E eu aperto 'Atualizar'
      features/step_definitions/credenciamento_professores_steps.rb:63
    8. Então eu devo ver "Solicitação 1"
      features/step_definitions/credenciamento_professores_steps.rb:67
    9. Print maroto :)
        -
    features/gerenciar_solicitacoes_credenciamento.feature:30

    Cenário: Recusar uma solicitação de credenciamento

    1. Quando eu clico em "Solicitação 2"
      features/gerenciar_solicitacoes_credenciamento.feature:31
      Quando("eu clico em {string}") do |string|
      -  pending # Write code here that turns the phrase above into concrete actions
      -end
    2. Então eu devo estar na página da "Solicitação 2"
      features/step_definitions/credenciamento_professores_steps.rb:42
    3. Quando eu clico em 'Rejeitar'
      features/step_definitions/credenciamento_professores_steps.rb:38
    4. Então eu devo estar na página de solicitações de credenciamento
      features/step_definitions/credenciamento_professores_steps.rb:42
    5. Quando eu desmarco os seguintes estados: Aprovadas, Reformulação
      features/gerenciar_solicitacoes_credenciamento.feature:35
      Quando("eu desmarco os seguintes estados: Aprovadas, Reformulação") do
      -  pending # Write code here that turns the phrase above into concrete actions
      -end
    6. E eu marco os seguintes estados: Rejeitadas
      features/gerenciar_solicitacoes_credenciamento.feature:36
      Quando("eu marco os seguintes estados: Rejeitadas") do
      -  pending # Write code here that turns the phrase above into concrete actions
      -end
    7. E eu aperto 'Atualizar'
      features/step_definitions/credenciamento_professores_steps.rb:63
    8. Então eu devo ver "Solicitação 2"
      features/step_definitions/credenciamento_professores_steps.rb:67
    9. Print maroto :)
        -
    # language: pt
    #encoding: utf-8

    Funcionalidade: Disponibilizar os requisitos necessarios para credenciamento de professores

    Como administrador autenticado no sistema,
    Quero poder disponibilizar para os professores os requisitos necessários para o credenciamento
    Para que eles possam dar procedimento ao credenciamento

    Contexto

    1. Dado que eu esteja logado como administrador de email "gp@admin.com" e senha "123"
      features/requisitos_necessarios.feature:10
      Dado("que eu esteja logado como administrador de email {string} e senha {string}") do |string, string2|
      -  pending # Write code here that turns the phrase above into concrete actions
      -end
    2. E não existem requisitos selecionados na página principal
      features/requisitos_necessarios.feature:11
      Dado("não existem requisitos selecionados na página principal") do
      -  pending # Write code here that turns the phrase above into concrete actions
      -end
    3. Quando o administrador clicou no link para alterar documentos necessários para credenciamento
      features/requisitos_necessarios.feature:12
      Quando("o administrador clicou no link para alterar documentos necessários para credenciamento") do
      -  pending # Write code here that turns the phrase above into concrete actions
      -end
    features/requisitos_necessarios.feature:14

    Cenário: Os campos puderam ser selecionados

    1. Quando eu selecionar os campos
      features/requisitos_necessarios.feature:15
      Quando("eu selecionar os campos") do
      -  pending # Write code here that turns the phrase above into concrete actions
      -end
    2. E eu clicar no botão atualizar requisitos
      features/requisitos_necessarios.feature:16
      Quando("eu clicar no botão atualizar requisitos") do
      -  pending # Write code here that turns the phrase above into concrete actions
      -end
    3. Então eu devo voltar para a página principal aonde aparece meus requisitos selecionados
      features/requisitos_necessarios.feature:17
      Então("eu devo voltar para a página principal aonde aparece meus requisitos selecionados") do
      -  pending # Write code here that turns the phrase above into concrete actions
      -end
    4. Print maroto :)
        -
    features/requisitos_necessarios.feature:19

    Cenário: Não houveram mudanças feitas

    1. Quando eu não selecionar os campos
      features/requisitos_necessarios.feature:20
      Quando("eu não selecionar os campos") do
      -  pending # Write code here that turns the phrase above into concrete actions
      -end
    2. E eu clicar no botão atualizar requisitos
      features/requisitos_necessarios.feature:21
      Quando("eu clicar no botão atualizar requisitos") do
      -  pending # Write code here that turns the phrase above into concrete actions
      -end
    3. Então eu recebo uma mensagem dizendo que "não houveram mudanças"
      features/requisitos_necessarios.feature:22
      Então("eu recebo uma mensagem dizendo que {string}") do |string|
      -  pending # Write code here that turns the phrase above into concrete actions
      -end
    4. Print maroto :)
        -
    # language: pt
    #encoding: utf-8

    Funcionalidade: Testar

    features/spike.feature:5

    Cenário:

    1. Dado que eu estou cadastrado e logado como "Gabriel", "gabriel@admin.com", "gabriel123", "administrator", "200000000"
      features/step_definitions/credenciamento_professores_steps.rb:8
    2. Print maroto :)
        -
    \ No newline at end of file +25# gem install syntax to get syntax highlighting
\ No newline at end of file diff --git a/features/gerenciar_solicitacoes_credenciamento.feature b/features/gerenciar_solicitacoes_credenciamento.feature index deb85efc..15717b4c 100644 --- a/features/gerenciar_solicitacoes_credenciamento.feature +++ b/features/gerenciar_solicitacoes_credenciamento.feature @@ -8,7 +8,7 @@ Funcionalidade: Gerenciar solicitações de credenciamento Contexto: Dado que existam as seguintes solicitações: - | title | activity_type_id | + | title | activity_type | | Solicitação 1 | Solicitação de credenciamento | | Solicitação 2 | Solicitação de credenciamento | | Solicitação 3 | Solicitação de credenciamento | diff --git a/features/spike.feature b/features/spike.feature index c6d04b45..d01b8a69 100644 --- a/features/spike.feature +++ b/features/spike.feature @@ -3,4 +3,9 @@ Funcionalidade: Testar Cenário: - Dado que eu estou cadastrado e logado como "Gabriel", "gabriel@admin.com", "gabriel123", "administrator", "200000000" + Dado que existam os seguintes credenciamentos sem prazo definido: + | title | full_name | + | Credenciamento 1 | Adalberto | + | Credenciamento 2 | Mariano | + | Credenciamento 3 | Joel | + E que eu esteja cadastrado e logado como "Gabriel", "gabriel@admin.com", "gabriel123", "administrator", "200000000" diff --git a/features/step_definitions/credenciamento_professores_steps.rb b/features/step_definitions/credenciamento_professores_steps.rb index 7d12b4dc..57ad311d 100644 --- a/features/step_definitions/credenciamento_professores_steps.rb +++ b/features/step_definitions/credenciamento_professores_steps.rb @@ -11,14 +11,22 @@ def with_scope(locator) World(WithinHelpers) Dado "que existam as seguintes solicitações:" do |table| - pending - # table.hashes.each do |row| - # Activity.create!(row) - # end + table.hashes.each do |row| + type = ActivityType.find_by(title: row['activity_type_title']) + if type == nil + type = ActivityType.create!(title: row['activity_type_title']) + end + Activity.create!(title: row['title'], activity_type_id: type.id) + end end Dado "que existam os seguintes credenciamentos sem prazo definido:" do |table| - pending + type_id = ActivityType.create!(title: 'Credenciamento').id + table.hashes.each do |row| + act_id = Activity.create!(title: row['title'], activity_type_id: type_id).id + usr_id = User.create!(full_name: row['full_name'], email: row['full_name']+"@professor.com", password: row['full_name']+"123", role: "professor", registration: "000000000").id + UserActivity.create!(activity_id: act_id, user_id: usr_id) + end end Dado /^que eu esteja cadastrado e logado como (.*)$/ do |input| diff --git a/report.json b/report.json index 43b1702d..21e33f44 100644 --- a/report.json +++ b/report.json @@ -1 +1 @@ -[{"uri":"features/abrir_solicitacao_credenciamento.feature","id":"abrir-solicitação-de-credenciamento","keyword":"Funcionalidade","name":"Abrir solicitação de credenciamento","description":" Como professor autenticado no sistema,\n Quero poder abrir uma solicitação de credenciamento\n Para que eu possa ser um professor credenciado","line":4,"comments":[{"value":"#encoding: utf-8","line":2}],"elements":[{"keyword":"Contexto","name":"","description":"","line":9,"type":"background","before":[{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:14"},"result":{"status":"passed","duration":31300}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:22"},"result":{"status":"passed","duration":19200}}],"steps":[{"keyword":"Dado ","name":"que eu estou cadastrado e logado como \"Lucas\", \"lucas@professor.com\", \"lucas123\", \"professor\", \"200000000\"","line":10,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:8"},"result":{"status":"passed","duration":2212292400}},{"keyword":"E ","name":"que eu estou na página de abrir solicitação de credenciamento","line":11,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:30"},"result":{"status":"failed","error_message":"Can't find mapping from \"de abrir solicitação de credenciamento\" to a path.\nNow, go and add a mapping in /mnt/c/Users/Fontenelle/Desktop/UnB/9 semestre/Engenharia de Software/secretaria_ppgi/features/support/paths.rb (RuntimeError)\n./features/support/paths.rb:31:in `rescue in path_to'\n./features/support/paths.rb:26:in `path_to'\n./features/step_definitions/credenciamento_professores_steps.rb:31:in `/^que eu estou na página (.+)$/'\nfeatures/abrir_solicitacao_credenciamento.feature:11:in `E que eu estou na página de abrir solicitação de credenciamento'","duration":163700}}]},{"id":"abrir-solicitação-de-credenciamento;solicitação-enviada-com-sucesso","keyword":"Cenário","name":"Solicitação enviada com sucesso","description":"","line":13,"type":"scenario","steps":[{"keyword":"Quando ","name":"eu anexo o arquivo \"Formulário de Credenciamento.pdf\" no campo 'Formulario'","line":14,"match":{"location":"features/abrir_solicitacao_credenciamento.feature:14"},"result":{"status":"undefined"}},{"keyword":"E ","name":"eu anexo o arquivo \"CV Lattes.pdf\" em 'CV Lattes'","line":15,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:34"},"result":{"status":"skipped"}},{"keyword":"E ","name":"eu clico em 'Enviar'","line":16,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:38"},"result":{"status":"skipped"}},{"keyword":"Então ","name":"eu devo ver \"Solicitação enviada com sucesso\"","line":17,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:67"},"result":{"status":"skipped"}}],"after":[{"embeddings":[{"mime_type":"image/png","data":"bG9nL3NjcmVlbnNob3RzL3NvbGljaXRhb2VudmlhZGFjb21zdWNlc3NvLnBuZw=="}],"match":{"location":"features/support/hooks.rb:1"},"result":{"status":"failed","error_message":"undefined method `manage' for #\u003cCapybara::RackTest::Browser:0x00007fffcd7263a0\u003e (NoMethodError)\n./features/support/hooks.rb:22:in `add_browser_logs'\n./features/support/hooks.rb:5:in `After'","duration":367500}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:10"},"result":{"status":"passed","duration":24900}}]},{"keyword":"Contexto","name":"","description":"","line":9,"type":"background","before":[{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:14"},"result":{"status":"passed","duration":11000}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:22"},"result":{"status":"passed","duration":9200}}],"steps":[{"keyword":"Dado ","name":"que eu estou cadastrado e logado como \"Lucas\", \"lucas@professor.com\", \"lucas123\", \"professor\", \"200000000\"","line":10,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:8"},"result":{"status":"passed","duration":36932100}},{"keyword":"E ","name":"que eu estou na página de abrir solicitação de credenciamento","line":11,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:30"},"result":{"status":"failed","error_message":"Can't find mapping from \"de abrir solicitação de credenciamento\" to a path.\nNow, go and add a mapping in /mnt/c/Users/Fontenelle/Desktop/UnB/9 semestre/Engenharia de Software/secretaria_ppgi/features/support/paths.rb (RuntimeError)\n./features/support/paths.rb:31:in `rescue in path_to'\n./features/support/paths.rb:26:in `path_to'\n./features/step_definitions/credenciamento_professores_steps.rb:31:in `/^que eu estou na página (.+)$/'\nfeatures/abrir_solicitacao_credenciamento.feature:11:in `E que eu estou na página de abrir solicitação de credenciamento'","duration":125900}}]},{"id":"abrir-solicitação-de-credenciamento;solicitação-não-enviada-(campo-obrigatório-em-branco)","keyword":"Cenário","name":"Solicitação não enviada (campo obrigatório em branco)","description":"","line":19,"type":"scenario","steps":[{"keyword":"Quando ","name":"eu anexo o arquivo \"Formulário de Credenciamento.pdf\" no campo 'Formulario'","line":20,"match":{"location":"features/abrir_solicitacao_credenciamento.feature:20"},"result":{"status":"undefined"}},{"keyword":"E ","name":"eu clico em 'Enviar'","line":21,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:38"},"result":{"status":"skipped"}},{"keyword":"Então ","name":"eu devo ver \"Solicitação não enviada (campo obrigatório* em branco)\"","line":22,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:67"},"result":{"status":"skipped"}}],"after":[{"embeddings":[{"mime_type":"image/png","data":"bG9nL3NjcmVlbnNob3RzL3NvbGljaXRhb25vZW52aWFkYWNhbXBvb2JyaWdhdHJpb2VtYnJhbmNvLnBuZw=="}],"match":{"location":"features/support/hooks.rb:1"},"result":{"status":"failed","error_message":"undefined method `manage' for #\u003cCapybara::RackTest::Browser:0x00007fffce93fbb8\u003e (NoMethodError)\n./features/support/hooks.rb:22:in `add_browser_logs'\n./features/support/hooks.rb:5:in `After'","duration":1180900}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:10"},"result":{"status":"passed","duration":20800}}]}]},{"uri":"features/credenciamento_periodo.feature","id":"definir-o-prazo-de-credenciamento-dos-professores","keyword":"Funcionalidade","name":"Definir o prazo de credenciamento dos professores","description":" Como um administrador,\n para que eu possa credenciar os professores,\n eu gostaria de definir o prazo de credenciamento dos professores","line":4,"comments":[{"value":"#encoding: utf-8","line":2}],"elements":[{"keyword":"Contexto","name":"","description":"","line":9,"type":"background","before":[{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:14"},"result":{"status":"passed","duration":11000}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:22"},"result":{"status":"passed","duration":8700}}],"steps":[{"keyword":"Dado ","name":"que eu esteja autenticado como usuario \"admin\"","line":10,"match":{"location":"features/credenciamento_periodo.feature:10"},"result":{"status":"undefined"}},{"keyword":"E ","name":"que esteja na página de credenciamento","line":11,"match":{"location":"features/credenciamento_periodo.feature:11"},"result":{"status":"undefined"}}]},{"id":"definir-o-prazo-de-credenciamento-dos-professores;definir-prazo-de-credenciamento-sem-data","keyword":"Cenário","name":"Definir prazo de credenciamento sem data","description":"","line":13,"type":"scenario","steps":[{"keyword":"Quando ","name":"eu aperto o botão \"Definir prazo de credenciamento\"","line":14,"match":{"location":"features/credenciamento_periodo.feature:14"},"result":{"status":"undefined"}},{"keyword":"E ","name":"eu aperto o botão \"Salvar período\"","line":15,"match":{"location":"features/credenciamento_periodo.feature:15"},"result":{"status":"undefined"}},{"keyword":"Então ","name":"eu espero ver a mensagem \"Insira uma data de início e uma data de término válidas.\"","line":16,"match":{"location":"features/credenciamento_periodo.feature:16"},"result":{"status":"undefined"}}],"after":[{"embeddings":[{"mime_type":"image/png","data":"bG9nL3NjcmVlbnNob3RzL2RlZmluaXJwcmF6b2RlY3JlZGVuY2lhbWVudG9zZW1kYXRhLnBuZw=="}],"match":{"location":"features/support/hooks.rb:1"},"result":{"status":"passed","duration":217700}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:10"},"result":{"status":"passed","duration":34100}}]},{"keyword":"Contexto","name":"","description":"","line":9,"type":"background","before":[{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:14"},"result":{"status":"passed","duration":12100}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:22"},"result":{"status":"passed","duration":21000}}],"steps":[{"keyword":"Dado ","name":"que eu esteja autenticado como usuario \"admin\"","line":10,"match":{"location":"features/credenciamento_periodo.feature:10"},"result":{"status":"undefined"}},{"keyword":"E ","name":"que esteja na página de credenciamento","line":11,"match":{"location":"features/credenciamento_periodo.feature:11"},"result":{"status":"undefined"}}]},{"id":"definir-o-prazo-de-credenciamento-dos-professores;definir-prazo-de-credenciamento-com-data","keyword":"Cenário","name":"Definir prazo de credenciamento com data","description":"","line":18,"type":"scenario","steps":[{"keyword":"Quando ","name":"eu aperto o botão \"Definir prazo de credenciamento\"","line":19,"match":{"location":"features/credenciamento_periodo.feature:19"},"result":{"status":"undefined"}},{"keyword":"Quando ","name":"eu adiciono um valor \"Início\" para \"Data de Início\"","line":20,"match":{"location":"features/credenciamento_periodo.feature:20"},"result":{"status":"undefined"}},{"keyword":"E ","name":"eu adiciono um valor \"Término\" para \"Data de Término\"","line":21,"match":{"location":"features/credenciamento_periodo.feature:21"},"result":{"status":"undefined"}},{"keyword":"E ","name":"eu aperto o botão \"Salvar período\"","line":22,"match":{"location":"features/credenciamento_periodo.feature:22"},"result":{"status":"undefined"}},{"keyword":"Então ","name":"eu espero ver a mensagem \"Prazo cadastrado com sucesso.\"","line":23,"match":{"location":"features/credenciamento_periodo.feature:23"},"result":{"status":"undefined"}}],"after":[{"embeddings":[{"mime_type":"image/png","data":"bG9nL3NjcmVlbnNob3RzL2RlZmluaXJwcmF6b2RlY3JlZGVuY2lhbWVudG9jb21kYXRhLnBuZw=="}],"match":{"location":"features/support/hooks.rb:1"},"result":{"status":"passed","duration":219300}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:10"},"result":{"status":"passed","duration":23100}}]}]},{"uri":"features/gerenciar_solicitacoes_credenciamento.feature","id":"gerenciar-solicitações-de-credenciamento","keyword":"Funcionalidade","name":"Gerenciar solicitações de credenciamento","description":" Como um admnistrador do sistema\n Quero visualizar uma solicitação de credencimento em aberto\n Para decidir se vou aceitar ou recusar tal solicitação","line":4,"comments":[{"value":"#encoding: utf-8","line":2}],"elements":[{"keyword":"Contexto","name":"","description":"","line":9,"type":"background","before":[{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:14"},"result":{"status":"passed","duration":12900}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:22"},"result":{"status":"passed","duration":9800}}],"steps":[{"keyword":"Dado ","name":"que as seguintes solicitações estejam pendentes:","line":10,"rows":[{"cells":["title","due_date","activity_type_id"]},{"cells":["Solicitação 1","02-Jan-2021","Solicitação de credenciamento"]},{"cells":["Solicitação 2","02-Jan-2021","Solicitação de credenciamento"]},{"cells":["Solicitação 3","02-Jan-2021","Solicitação de credenciamento"]},{"cells":["Solicitação 4","02-Jan-2021","Solicitação de credenciamento"]}],"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:1"},"result":{"status":"pending","error_message":"TODO (Cucumber::Pending)\n./features/step_definitions/credenciamento_professores_steps.rb:2:in `\"que as seguintes solicitações estejam pendentes:\"'\nfeatures/gerenciar_solicitacoes_credenciamento.feature:10:in `Dado que as seguintes solicitações estejam pendentes:'","duration":496800}},{"keyword":"E ","name":"que eu estou cadastrado e logado como \"Gabriel\", \"gabriel@admin.com\", \"gabriel123\", \"administrator\", \"200000000\"","line":17,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:8"},"result":{"status":"skipped"}},{"keyword":"E ","name":"que eu estou na página de solicitações de credenciamento","line":18,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:30"},"result":{"status":"skipped"}}]},{"id":"gerenciar-solicitações-de-credenciamento;aceitar-uma-solicitação-de-credenciamento","keyword":"Cenário","name":"Aceitar uma solicitação de credenciamento","description":"","line":20,"type":"scenario","steps":[{"keyword":"Quando ","name":"eu clico em \"Solicitação 1\"","line":21,"match":{"location":"features/gerenciar_solicitacoes_credenciamento.feature:21"},"result":{"status":"undefined"}},{"keyword":"Então ","name":"eu devo estar na página da \"Solicitação 1\"","line":22,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:42"},"result":{"status":"skipped"}},{"keyword":"Quando ","name":"eu clico em 'Aprovar'","line":23,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:38"},"result":{"status":"skipped"}},{"keyword":"Então ","name":"eu devo estar na página de solicitações de credenciamento","line":24,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:42"},"result":{"status":"skipped"}},{"keyword":"Quando ","name":"eu desmarco os seguintes estados: Rejeitadas, Reformulação","line":25,"match":{"location":"features/gerenciar_solicitacoes_credenciamento.feature:25"},"result":{"status":"undefined"}},{"keyword":"E ","name":"eu marco os seguintes estados: Aprovadas","line":26,"match":{"location":"features/gerenciar_solicitacoes_credenciamento.feature:26"},"result":{"status":"undefined"}},{"keyword":"E ","name":"eu aperto 'Atualizar'","line":27,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:63"},"result":{"status":"skipped"}},{"keyword":"Então ","name":"eu devo ver \"Solicitação 1\"","line":28,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:67"},"result":{"status":"skipped"}}],"after":[{"embeddings":[{"mime_type":"image/png","data":"bG9nL3NjcmVlbnNob3RzL2FjZWl0YXJ1bWFzb2xpY2l0YW9kZWNyZWRlbmNpYW1lbnRvLnBuZw=="}],"match":{"location":"features/support/hooks.rb:1"},"result":{"status":"passed","duration":220200}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:10"},"result":{"status":"passed","duration":25200}}]},{"keyword":"Contexto","name":"","description":"","line":9,"type":"background","before":[{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:14"},"result":{"status":"passed","duration":15900}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:22"},"result":{"status":"passed","duration":12000}}],"steps":[{"keyword":"Dado ","name":"que as seguintes solicitações estejam pendentes:","line":10,"rows":[{"cells":["title","due_date","activity_type_id"]},{"cells":["Solicitação 1","02-Jan-2021","Solicitação de credenciamento"]},{"cells":["Solicitação 2","02-Jan-2021","Solicitação de credenciamento"]},{"cells":["Solicitação 3","02-Jan-2021","Solicitação de credenciamento"]},{"cells":["Solicitação 4","02-Jan-2021","Solicitação de credenciamento"]}],"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:1"},"result":{"status":"pending","error_message":"TODO (Cucumber::Pending)\n./features/step_definitions/credenciamento_professores_steps.rb:2:in `\"que as seguintes solicitações estejam pendentes:\"'\nfeatures/gerenciar_solicitacoes_credenciamento.feature:10:in `Dado que as seguintes solicitações estejam pendentes:'","duration":147300}},{"keyword":"E ","name":"que eu estou cadastrado e logado como \"Gabriel\", \"gabriel@admin.com\", \"gabriel123\", \"administrator\", \"200000000\"","line":17,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:8"},"result":{"status":"skipped"}},{"keyword":"E ","name":"que eu estou na página de solicitações de credenciamento","line":18,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:30"},"result":{"status":"skipped"}}]},{"id":"gerenciar-solicitações-de-credenciamento;recusar-uma-solicitação-de-credenciamento","keyword":"Cenário","name":"Recusar uma solicitação de credenciamento","description":"","line":30,"type":"scenario","steps":[{"keyword":"Quando ","name":"eu clico em \"Solicitação 2\"","line":31,"match":{"location":"features/gerenciar_solicitacoes_credenciamento.feature:31"},"result":{"status":"undefined"}},{"keyword":"Então ","name":"eu devo estar na página da \"Solicitação 2\"","line":32,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:42"},"result":{"status":"skipped"}},{"keyword":"Quando ","name":"eu clico em 'Rejeitar'","line":33,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:38"},"result":{"status":"skipped"}},{"keyword":"Então ","name":"eu devo estar na página de solicitações de credenciamento","line":34,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:42"},"result":{"status":"skipped"}},{"keyword":"Quando ","name":"eu desmarco os seguintes estados: Aprovadas, Reformulação","line":35,"match":{"location":"features/gerenciar_solicitacoes_credenciamento.feature:35"},"result":{"status":"undefined"}},{"keyword":"E ","name":"eu marco os seguintes estados: Rejeitadas","line":36,"match":{"location":"features/gerenciar_solicitacoes_credenciamento.feature:36"},"result":{"status":"undefined"}},{"keyword":"E ","name":"eu aperto 'Atualizar'","line":37,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:63"},"result":{"status":"skipped"}},{"keyword":"Então ","name":"eu devo ver \"Solicitação 2\"","line":38,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:67"},"result":{"status":"skipped"}}],"after":[{"embeddings":[{"mime_type":"image/png","data":"bG9nL3NjcmVlbnNob3RzL3JlY3VzYXJ1bWFzb2xpY2l0YW9kZWNyZWRlbmNpYW1lbnRvLnBuZw=="}],"match":{"location":"features/support/hooks.rb:1"},"result":{"status":"passed","duration":191900}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:10"},"result":{"status":"passed","duration":25600}}]}]},{"uri":"features/requisitos_necessarios.feature","id":"disponibilizar-os-requisitos-necessarios-para-credenciamento-de-professores","keyword":"Funcionalidade","name":"Disponibilizar os requisitos necessarios para credenciamento de professores","description":" Como administrador autenticado no sistema,\n Quero poder disponibilizar para os professores os requisitos necessários para o credenciamento\n Para que eles possam dar procedimento ao credenciamento","line":4,"comments":[{"value":"#encoding: utf-8","line":2}],"elements":[{"keyword":"Contexto","name":"","description":"","line":9,"type":"background","before":[{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:14"},"result":{"status":"passed","duration":12000}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:22"},"result":{"status":"passed","duration":12700}}],"steps":[{"keyword":"Dado ","name":"que eu esteja logado como administrador de email \"gp@admin.com\" e senha \"123\"","line":10,"match":{"location":"features/requisitos_necessarios.feature:10"},"result":{"status":"undefined"}},{"keyword":"E ","name":"não existem requisitos selecionados na página principal","line":11,"match":{"location":"features/requisitos_necessarios.feature:11"},"result":{"status":"undefined"}},{"keyword":"Quando ","name":"o administrador clicou no link para alterar documentos necessários para credenciamento","line":12,"match":{"location":"features/requisitos_necessarios.feature:12"},"result":{"status":"undefined"}}]},{"id":"disponibilizar-os-requisitos-necessarios-para-credenciamento-de-professores;os-campos-puderam-ser-selecionados","keyword":"Cenário","name":"Os campos puderam ser selecionados","description":"","line":14,"type":"scenario","steps":[{"keyword":"Quando ","name":"eu selecionar os campos","line":15,"match":{"location":"features/requisitos_necessarios.feature:15"},"result":{"status":"undefined"}},{"keyword":"E ","name":"eu clicar no botão atualizar requisitos","line":16,"match":{"location":"features/requisitos_necessarios.feature:16"},"result":{"status":"undefined"}},{"keyword":"Então ","name":"eu devo voltar para a página principal aonde aparece meus requisitos selecionados","line":17,"match":{"location":"features/requisitos_necessarios.feature:17"},"result":{"status":"undefined"}}],"after":[{"embeddings":[{"mime_type":"image/png","data":"bG9nL3NjcmVlbnNob3RzL29zY2FtcG9zcHVkZXJhbXNlcnNlbGVjaW9uYWRvcy5wbmc="}],"match":{"location":"features/support/hooks.rb:1"},"result":{"status":"passed","duration":2373100}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:10"},"result":{"status":"passed","duration":40300}}]},{"keyword":"Contexto","name":"","description":"","line":9,"type":"background","before":[{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:14"},"result":{"status":"passed","duration":15100}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:22"},"result":{"status":"passed","duration":9600}}],"steps":[{"keyword":"Dado ","name":"que eu esteja logado como administrador de email \"gp@admin.com\" e senha \"123\"","line":10,"match":{"location":"features/requisitos_necessarios.feature:10"},"result":{"status":"undefined"}},{"keyword":"E ","name":"não existem requisitos selecionados na página principal","line":11,"match":{"location":"features/requisitos_necessarios.feature:11"},"result":{"status":"undefined"}},{"keyword":"Quando ","name":"o administrador clicou no link para alterar documentos necessários para credenciamento","line":12,"match":{"location":"features/requisitos_necessarios.feature:12"},"result":{"status":"undefined"}}]},{"id":"disponibilizar-os-requisitos-necessarios-para-credenciamento-de-professores;não-houveram-mudanças-feitas","keyword":"Cenário","name":"Não houveram mudanças feitas","description":"","line":19,"type":"scenario","steps":[{"keyword":"Quando ","name":"eu não selecionar os campos","line":20,"match":{"location":"features/requisitos_necessarios.feature:20"},"result":{"status":"undefined"}},{"keyword":"E ","name":"eu clicar no botão atualizar requisitos","line":21,"match":{"location":"features/requisitos_necessarios.feature:21"},"result":{"status":"undefined"}},{"keyword":"Então ","name":"eu recebo uma mensagem dizendo que \"não houveram mudanças\"","line":22,"match":{"location":"features/requisitos_necessarios.feature:22"},"result":{"status":"undefined"}}],"after":[{"embeddings":[{"mime_type":"image/png","data":"bG9nL3NjcmVlbnNob3RzL25vaG91dmVyYW1tdWRhbmFzZmVpdGFzLnBuZw=="}],"match":{"location":"features/support/hooks.rb:1"},"result":{"status":"passed","duration":214700}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:10"},"result":{"status":"passed","duration":18600}}]}]},{"uri":"features/spike.feature","id":"testar","keyword":"Funcionalidade","name":"Testar","description":"","line":4,"comments":[{"value":"#encoding: utf-8","line":2}],"elements":[{"id":"testar;","keyword":"Cenário","name":"","description":"","line":5,"type":"scenario","before":[{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:14"},"result":{"status":"passed","duration":18600}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:22"},"result":{"status":"passed","duration":13400}}],"steps":[{"keyword":"Dado ","name":"que eu estou cadastrado e logado como \"Gabriel\", \"gabriel@admin.com\", \"gabriel123\", \"administrator\", \"200000000\"","line":6,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:8"},"result":{"status":"passed","duration":39523000}}],"after":[{"embeddings":[{"mime_type":"image/png","data":"bG9nL3NjcmVlbnNob3RzLy5wbmc="}],"match":{"location":"features/support/hooks.rb:1"},"result":{"status":"passed","duration":223700}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:10"},"result":{"status":"passed","duration":19100}}]}]}] \ No newline at end of file +[{"uri":"features/spike.feature","id":"testar","keyword":"Funcionalidade","name":"Testar","description":"","line":4,"comments":[{"value":"#encoding: utf-8","line":2}],"elements":[{"id":"testar;","keyword":"Cenário","name":"","description":"","line":5,"type":"scenario","before":[{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:14"},"result":{"status":"passed","duration":18200}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:22"},"result":{"status":"passed","duration":10500}}],"steps":[{"keyword":"Dado ","name":"que existam os seguintes credenciamentos sem prazo definido:","line":6,"rows":[{"cells":["title","full_name"]},{"cells":["Credenciamento 1","Adalberto"]},{"cells":["Credenciamento 2","Mariano"]},{"cells":["Credenciamento 3","Joel"]}],"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:23"},"result":{"status":"failed","error_message":"Validation failed: User must exist (ActiveRecord::RecordInvalid)\n./features/step_definitions/credenciamento_professores_steps.rb:28:in `block (2 levels) in \u003cmain\u003e'\n./features/step_definitions/credenciamento_professores_steps.rb:25:in `each'\n./features/step_definitions/credenciamento_professores_steps.rb:25:in `\"que existam os seguintes credenciamentos sem prazo definido:\"'\nfeatures/spike.feature:6:in `Dado que existam os seguintes credenciamentos sem prazo definido:'","duration":66918400}},{"keyword":"E ","name":"que eu esteja cadastrado e logado como \"Gabriel\", \"gabriel@admin.com\", \"gabriel123\", \"administrator\", \"200000000\"","line":11,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:32"},"result":{"status":"skipped"}}],"after":[{"embeddings":[{"mime_type":"image/png","data":"bG9nL3NjcmVlbnNob3RzLy5wbmc="}],"match":{"location":"features/support/hooks.rb:1"},"result":{"status":"failed","error_message":"undefined method `manage' for #\u003cCapybara::RackTest::Browser:0x00007fffd5be5c58\u003e (NoMethodError)\n./features/support/hooks.rb:22:in `add_browser_logs'\n./features/support/hooks.rb:5:in `After'","duration":390200}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:10"},"result":{"status":"passed","duration":24100}}]}]}] \ No newline at end of file From 494a6e365ae365d1e3abfd0b13ee78d5dee8d310 Mon Sep 17 00:00:00 2001 From: ngsylar Date: Wed, 11 Nov 2020 02:16:13 -0300 Subject: [PATCH 15/36] minor changes variable names --- features/credenciamento_periodo.feature | 8 ++++---- features/gerenciar_solicitacoes_credenciamento.feature | 2 +- .../step_definitions/credenciamento_professores_steps.rb | 4 ++-- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/features/credenciamento_periodo.feature b/features/credenciamento_periodo.feature index 2a320233..4535551e 100644 --- a/features/credenciamento_periodo.feature +++ b/features/credenciamento_periodo.feature @@ -8,10 +8,10 @@ Funcionalidade: Definir o prazo de credenciamento dos professores Contexto: Dado que existam os seguintes credenciamentos sem prazo definido: - | title | full_name | - | Credenciamento 1 | Adalberto | - | Credenciamento 2 | Mariano | - | Credenciamento 3 | Joel | + | activity_title | user_full_name | + | Credenciamento 1 | Adalberto | + | Credenciamento 2 | Mariano | + | Credenciamento 3 | Joel | E que eu esteja cadastrado e logado como "Aécio", "aecio@admin.com", "aecio123", "administrator", "200000000" E que esteja na página de prazos de credenciamento diff --git a/features/gerenciar_solicitacoes_credenciamento.feature b/features/gerenciar_solicitacoes_credenciamento.feature index 15717b4c..4bd19949 100644 --- a/features/gerenciar_solicitacoes_credenciamento.feature +++ b/features/gerenciar_solicitacoes_credenciamento.feature @@ -8,7 +8,7 @@ Funcionalidade: Gerenciar solicitações de credenciamento Contexto: Dado que existam as seguintes solicitações: - | title | activity_type | + | title | activity_type_title | | Solicitação 1 | Solicitação de credenciamento | | Solicitação 2 | Solicitação de credenciamento | | Solicitação 3 | Solicitação de credenciamento | diff --git a/features/step_definitions/credenciamento_professores_steps.rb b/features/step_definitions/credenciamento_professores_steps.rb index 57ad311d..5ff79e50 100644 --- a/features/step_definitions/credenciamento_professores_steps.rb +++ b/features/step_definitions/credenciamento_professores_steps.rb @@ -23,8 +23,8 @@ def with_scope(locator) Dado "que existam os seguintes credenciamentos sem prazo definido:" do |table| type_id = ActivityType.create!(title: 'Credenciamento').id table.hashes.each do |row| - act_id = Activity.create!(title: row['title'], activity_type_id: type_id).id - usr_id = User.create!(full_name: row['full_name'], email: row['full_name']+"@professor.com", password: row['full_name']+"123", role: "professor", registration: "000000000").id + act_id = Activity.create!(title: row['activity_title'], activity_type_id: type_id).id + usr_id = User.create!(full_name: row['user_full_name'], email: row['user_full_name']+"@professor.com", password: row['user_full_name']+"123", role: "professor", registration: "000000000").id UserActivity.create!(activity_id: act_id, user_id: usr_id) end end From cd681dc16fe7849ac8452650887a8ef6a9a0aaa8 Mon Sep 17 00:00:00 2001 From: ngsylar Date: Thu, 12 Nov 2020 00:30:46 -0300 Subject: [PATCH 16/36] Scaffold and ActiveStorage --- Gemfile | 1 - Gemfile.lock | 254 ++--- app/assets/javascripts/activities.coffee | 3 + app/assets/javascripts/activity_types.coffee | 3 + app/assets/javascripts/user_activities.coffee | 3 + app/assets/stylesheets/activities.scss | 3 + app/assets/stylesheets/activity_types.scss | 3 + app/assets/stylesheets/scaffolds.scss | 84 ++ app/assets/stylesheets/user_activities.scss | 3 + app/controllers/activities_controller.rb | 74 ++ app/controllers/activity_types_controller.rb | 74 ++ app/controllers/home_controller.rb | 2 +- app/controllers/user_activities_controller.rb | 74 ++ app/helpers/activities_helper.rb | 2 + app/helpers/activity_types_helper.rb | 2 + app/helpers/user_activities_helper.rb | 2 + app/models/activity.rb | 3 +- app/models/user_activity.rb | 4 +- app/views/activities/_activity.json.jbuilder | 2 + app/views/activities/_form.html.erb | 42 + app/views/activities/edit.html.erb | 6 + app/views/activities/index.html.erb | 35 + app/views/activities/index.json.jbuilder | 1 + app/views/activities/new.html.erb | 5 + app/views/activities/show.html.erb | 29 + app/views/activities/show.json.jbuilder | 1 + .../_activity_type.json.jbuilder | 2 + app/views/activity_types/_form.html.erb | 22 + app/views/activity_types/edit.html.erb | 6 + app/views/activity_types/index.html.erb | 27 + app/views/activity_types/index.json.jbuilder | 1 + app/views/activity_types/new.html.erb | 5 + app/views/activity_types/show.html.erb | 9 + app/views/activity_types/show.json.jbuilder | 1 + app/views/home/index.html.erb | 1 - app/views/user_activities/_form.html.erb | 37 + .../_user_activity.json.jbuilder | 2 + app/views/user_activities/edit.html.erb | 6 + app/views/user_activities/index.html.erb | 33 + app/views/user_activities/index.json.jbuilder | 1 + app/views/user_activities/new.html.erb | 5 + app/views/user_activities/show.html.erb | 24 + app/views/user_activities/show.json.jbuilder | 1 + config/routes.rb | 3 + .../20201111004340_create_activities.rb | 21 - ...> 20201112014423_create_activity_types.rb} | 2 + ...te_active_storage_tables.active_storage.rb | 27 + .../20201112030653_create_activities.rb | 13 + .../20201112030843_create_user_activities.rb | 13 + db/schema.rb | 32 +- db/seeds.rb | 1 + features.html | 878 +++++++++--------- features/spike.feature | 12 +- features/support/hooks.rb | 2 +- report.json | 2 +- spec/helpers/activities_helper_spec.rb | 15 + spec/helpers/activity_types_helper_spec.rb | 15 + spec/helpers/user_activities_helper_spec.rb | 15 + spec/models/activity_spec.rb | 5 + spec/models/user_activity_spec.rb | 5 + spec/rails_helper.rb | 9 +- spec/requests/activities_spec.rb | 129 +++ spec/requests/activity_types_spec.rb | 129 +++ spec/requests/user_activities_spec.rb | 129 +++ spec/routing/activities_routing_spec.rb | 38 + spec/routing/activity_types_routing_spec.rb | 38 + spec/routing/user_activities_routing_spec.rb | 38 + spec/spike_spec.rb | 7 + spec/views/activities/edit.html.erb_spec.rb | 27 + spec/views/activities/index.html.erb_spec.rb | 28 + spec/views/activities/new.html.erb_spec.rb | 27 + spec/views/activities/show.html.erb_spec.rb | 20 + .../activity_types/edit.html.erb_spec.rb | 18 + .../activity_types/index.html.erb_spec.rb | 19 + .../views/activity_types/new.html.erb_spec.rb | 18 + .../activity_types/show.html.erb_spec.rb | 14 + .../user_activities/edit.html.erb_spec.rb | 27 + .../user_activities/index.html.erb_spec.rb | 28 + .../user_activities/new.html.erb_spec.rb | 27 + .../user_activities/show.html.erb_spec.rb | 20 + 80 files changed, 2158 insertions(+), 591 deletions(-) create mode 100644 app/assets/javascripts/activities.coffee create mode 100644 app/assets/javascripts/activity_types.coffee create mode 100644 app/assets/javascripts/user_activities.coffee create mode 100644 app/assets/stylesheets/activities.scss create mode 100644 app/assets/stylesheets/activity_types.scss create mode 100644 app/assets/stylesheets/scaffolds.scss create mode 100644 app/assets/stylesheets/user_activities.scss create mode 100644 app/controllers/activities_controller.rb create mode 100644 app/controllers/activity_types_controller.rb create mode 100644 app/controllers/user_activities_controller.rb create mode 100644 app/helpers/activities_helper.rb create mode 100644 app/helpers/activity_types_helper.rb create mode 100644 app/helpers/user_activities_helper.rb create mode 100644 app/views/activities/_activity.json.jbuilder create mode 100644 app/views/activities/_form.html.erb create mode 100644 app/views/activities/edit.html.erb create mode 100644 app/views/activities/index.html.erb create mode 100644 app/views/activities/index.json.jbuilder create mode 100644 app/views/activities/new.html.erb create mode 100644 app/views/activities/show.html.erb create mode 100644 app/views/activities/show.json.jbuilder create mode 100644 app/views/activity_types/_activity_type.json.jbuilder create mode 100644 app/views/activity_types/_form.html.erb create mode 100644 app/views/activity_types/edit.html.erb create mode 100644 app/views/activity_types/index.html.erb create mode 100644 app/views/activity_types/index.json.jbuilder create mode 100644 app/views/activity_types/new.html.erb create mode 100644 app/views/activity_types/show.html.erb create mode 100644 app/views/activity_types/show.json.jbuilder create mode 100644 app/views/user_activities/_form.html.erb create mode 100644 app/views/user_activities/_user_activity.json.jbuilder create mode 100644 app/views/user_activities/edit.html.erb create mode 100644 app/views/user_activities/index.html.erb create mode 100644 app/views/user_activities/index.json.jbuilder create mode 100644 app/views/user_activities/new.html.erb create mode 100644 app/views/user_activities/show.html.erb create mode 100644 app/views/user_activities/show.json.jbuilder delete mode 100644 db/migrate/20201111004340_create_activities.rb rename db/migrate/{20201111004338_create_activity_types.rb => 20201112014423_create_activity_types.rb} (88%) create mode 100644 db/migrate/20201112022823_create_active_storage_tables.active_storage.rb create mode 100644 db/migrate/20201112030653_create_activities.rb create mode 100644 db/migrate/20201112030843_create_user_activities.rb create mode 100644 spec/helpers/activities_helper_spec.rb create mode 100644 spec/helpers/activity_types_helper_spec.rb create mode 100644 spec/helpers/user_activities_helper_spec.rb create mode 100644 spec/models/activity_spec.rb create mode 100644 spec/models/user_activity_spec.rb create mode 100644 spec/requests/activities_spec.rb create mode 100644 spec/requests/activity_types_spec.rb create mode 100644 spec/requests/user_activities_spec.rb create mode 100644 spec/routing/activities_routing_spec.rb create mode 100644 spec/routing/activity_types_routing_spec.rb create mode 100644 spec/routing/user_activities_routing_spec.rb create mode 100644 spec/spike_spec.rb create mode 100644 spec/views/activities/edit.html.erb_spec.rb create mode 100644 spec/views/activities/index.html.erb_spec.rb create mode 100644 spec/views/activities/new.html.erb_spec.rb create mode 100644 spec/views/activities/show.html.erb_spec.rb create mode 100644 spec/views/activity_types/edit.html.erb_spec.rb create mode 100644 spec/views/activity_types/index.html.erb_spec.rb create mode 100644 spec/views/activity_types/new.html.erb_spec.rb create mode 100644 spec/views/activity_types/show.html.erb_spec.rb create mode 100644 spec/views/user_activities/edit.html.erb_spec.rb create mode 100644 spec/views/user_activities/index.html.erb_spec.rb create mode 100644 spec/views/user_activities/new.html.erb_spec.rb create mode 100644 spec/views/user_activities/show.html.erb_spec.rb diff --git a/Gemfile b/Gemfile index d347e85b..c955677d 100644 --- a/Gemfile +++ b/Gemfile @@ -42,7 +42,6 @@ group :development, :test do # Call 'byebug' anywhere in the code to stop execution and get a debugger console gem 'byebug', platforms: [:mri, :mingw, :x64_mingw] gem 'rspec-rails' - end group :development do diff --git a/Gemfile.lock b/Gemfile.lock index b6223e46..0be772a3 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,43 +1,43 @@ GEM remote: https://rubygems.org/ specs: - actioncable (5.2.3) - actionpack (= 5.2.3) + actioncable (5.2.4.4) + actionpack (= 5.2.4.4) nio4r (~> 2.0) websocket-driver (>= 0.6.1) - actionmailer (5.2.3) - actionpack (= 5.2.3) - actionview (= 5.2.3) - activejob (= 5.2.3) + actionmailer (5.2.4.4) + actionpack (= 5.2.4.4) + actionview (= 5.2.4.4) + activejob (= 5.2.4.4) mail (~> 2.5, >= 2.5.4) rails-dom-testing (~> 2.0) - actionpack (5.2.3) - actionview (= 5.2.3) - activesupport (= 5.2.3) - rack (~> 2.0) + actionpack (5.2.4.4) + actionview (= 5.2.4.4) + activesupport (= 5.2.4.4) + rack (~> 2.0, >= 2.0.8) rack-test (>= 0.6.3) rails-dom-testing (~> 2.0) rails-html-sanitizer (~> 1.0, >= 1.0.2) - actionview (5.2.3) - activesupport (= 5.2.3) + actionview (5.2.4.4) + activesupport (= 5.2.4.4) builder (~> 3.1) erubi (~> 1.4) rails-dom-testing (~> 2.0) rails-html-sanitizer (~> 1.0, >= 1.0.3) - activejob (5.2.3) - activesupport (= 5.2.3) + activejob (5.2.4.4) + activesupport (= 5.2.4.4) globalid (>= 0.3.6) - activemodel (5.2.3) - activesupport (= 5.2.3) - activerecord (5.2.3) - activemodel (= 5.2.3) - activesupport (= 5.2.3) + activemodel (5.2.4.4) + activesupport (= 5.2.4.4) + activerecord (5.2.4.4) + activemodel (= 5.2.4.4) + activesupport (= 5.2.4.4) arel (>= 9.0) - activestorage (5.2.3) - actionpack (= 5.2.3) - activerecord (= 5.2.3) + activestorage (5.2.4.4) + actionpack (= 5.2.4.4) + activerecord (= 5.2.4.4) marcel (~> 0.3.1) - activesupport (5.2.3) + activesupport (5.2.4.4) concurrent-ruby (~> 1.0, >= 1.0.2) i18n (>= 0.7, < 2) minitest (~> 5.1) @@ -45,14 +45,13 @@ GEM addressable (2.7.0) public_suffix (>= 2.0.2, < 5.0) arel (9.0.0) - backports (3.15.0) - bcrypt (3.1.13) + bcrypt (3.1.16) bindex (0.8.1) - bootsnap (1.4.5) + bootsnap (1.5.1) msgpack (~> 1.0) - builder (3.2.3) - byebug (11.0.1) - capybara (3.29.0) + builder (3.2.4) + byebug (11.1.3) + capybara (3.33.0) addressable mini_mime (>= 0.1.3) nokogiri (~> 1.8) @@ -68,135 +67,154 @@ GEM coffee-script-source execjs coffee-script-source (1.12.2) - concurrent-ruby (1.1.5) - crass (1.0.5) - cucumber (3.1.2) - builder (>= 2.1.2) - cucumber-core (~> 3.2.0) - cucumber-expressions (~> 6.0.1) - cucumber-wire (~> 0.0.1) - diff-lcs (~> 1.3) - gherkin (~> 5.1.0) - multi_json (>= 1.7.5, < 2.0) - multi_test (>= 0.1.2) - cucumber-core (3.2.1) - backports (>= 3.8.0) - cucumber-tag_expressions (~> 1.1.0) - gherkin (~> 5.0) - cucumber-expressions (6.0.1) - cucumber-rails (2.0.0) - capybara (>= 2.12, < 4) - cucumber (>= 3.0.2, < 4) - mime-types (>= 2.0, < 4) + concurrent-ruby (1.1.7) + crass (1.0.6) + cucumber (5.2.0) + builder (~> 3.2, >= 3.2.4) + cucumber-core (~> 8.0, >= 8.0.1) + cucumber-create-meta (~> 2.0, >= 2.0.2) + cucumber-cucumber-expressions (~> 10.3, >= 10.3.0) + cucumber-gherkin (~> 15.0, >= 15.0.2) + cucumber-html-formatter (~> 9.0, >= 9.0.0) + cucumber-messages (~> 13.1, >= 13.1.0) + cucumber-wire (~> 4.0, >= 4.0.1) + diff-lcs (~> 1.4, >= 1.4.4) + multi_test (~> 0.1, >= 0.1.2) + sys-uname (~> 1.2, >= 1.2.1) + cucumber-core (8.0.1) + cucumber-gherkin (~> 15.0, >= 15.0.2) + cucumber-messages (~> 13.0, >= 13.0.1) + cucumber-tag-expressions (~> 2.0, >= 2.0.4) + cucumber-create-meta (2.0.4) + cucumber-messages (~> 13.1, >= 13.1.0) + sys-uname (~> 1.2, >= 1.2.1) + cucumber-cucumber-expressions (10.3.0) + cucumber-gherkin (15.0.2) + cucumber-messages (~> 13.0, >= 13.0.1) + cucumber-html-formatter (9.0.0) + cucumber-messages (~> 13.0, >= 13.0.1) + cucumber-messages (13.1.0) + protobuf-cucumber (~> 3.10, >= 3.10.8) + cucumber-rails (2.2.0) + capybara (>= 2.18, < 4) + cucumber (>= 3.0.2, < 6) + mime-types (~> 3.2) nokogiri (~> 1.8) - railties (>= 4.2, < 7) + rails (>= 5.0, < 7) cucumber-rails-training-wheels (1.0.0) cucumber-rails (>= 1.1.1) - cucumber-tag_expressions (1.1.1) - cucumber-wire (0.0.1) - database_cleaner (1.7.0) - devise (4.7.1) + cucumber-tag-expressions (2.0.4) + cucumber-wire (4.0.1) + cucumber-core (~> 8.0, >= 8.0.1) + cucumber-cucumber-expressions (~> 10.3, >= 10.3.0) + cucumber-messages (~> 13.0, >= 13.0.1) + database_cleaner (1.8.5) + devise (4.7.3) bcrypt (~> 3.0) orm_adapter (~> 0.1) railties (>= 4.1.0) responders warden (~> 1.2.3) - diff-lcs (1.3) + diff-lcs (1.4.4) erubi (1.9.0) execjs (2.7.0) - ffi (1.11.1) - gherkin (5.1.0) + ffi (1.13.1) globalid (0.4.2) activesupport (>= 4.2.0) - i18n (1.7.0) + i18n (1.8.5) concurrent-ruby (~> 1.0) - jbuilder (2.9.1) - activesupport (>= 4.2.0) + jbuilder (2.10.1) + activesupport (>= 5.0.0) launchy (2.5.0) addressable (~> 2.7) listen (3.1.5) rb-fsevent (~> 0.9, >= 0.9.4) rb-inotify (~> 0.9, >= 0.9.7) ruby_dep (~> 1.2) - loofah (2.3.1) + loofah (2.7.0) crass (~> 1.0.2) nokogiri (>= 1.5.9) mail (2.7.1) mini_mime (>= 0.1.1) marcel (0.3.3) mimemagic (~> 0.3.2) - method_source (0.9.2) - mime-types (3.3) + method_source (1.0.0) + middleware (0.1.0) + mime-types (3.3.1) mime-types-data (~> 3.2015) - mime-types-data (3.2019.1009) - mimemagic (0.3.3) + mime-types-data (3.2020.1104) + mimemagic (0.3.5) mini_mime (1.0.2) mini_portile2 (2.4.0) - minitest (5.12.2) - msgpack (1.3.1) - multi_json (1.14.1) + minitest (5.14.2) + msgpack (1.3.3) multi_test (0.1.2) - nio4r (2.5.2) - nokogiri (1.10.8) + nio4r (2.5.4) + nokogiri (1.10.10) mini_portile2 (~> 2.4.0) orm_adapter (0.5.0) - pg (1.1.4) - public_suffix (4.0.1) + pg (1.2.3) + protobuf-cucumber (3.10.8) + activesupport (>= 3.2) + middleware + thor + thread_safe + public_suffix (4.0.6) puma (3.12.6) rack (2.2.3) rack-test (1.1.0) rack (>= 1.0, < 3) - rails (5.2.3) - actioncable (= 5.2.3) - actionmailer (= 5.2.3) - actionpack (= 5.2.3) - actionview (= 5.2.3) - activejob (= 5.2.3) - activemodel (= 5.2.3) - activerecord (= 5.2.3) - activestorage (= 5.2.3) - activesupport (= 5.2.3) + rails (5.2.4.4) + actioncable (= 5.2.4.4) + actionmailer (= 5.2.4.4) + actionpack (= 5.2.4.4) + actionview (= 5.2.4.4) + activejob (= 5.2.4.4) + activemodel (= 5.2.4.4) + activerecord (= 5.2.4.4) + activestorage (= 5.2.4.4) + activesupport (= 5.2.4.4) bundler (>= 1.3.0) - railties (= 5.2.3) + railties (= 5.2.4.4) sprockets-rails (>= 2.0.0) rails-dom-testing (2.0.3) activesupport (>= 4.2.0) nokogiri (>= 1.6) rails-html-sanitizer (1.3.0) loofah (~> 2.3) - railties (5.2.3) - actionpack (= 5.2.3) - activesupport (= 5.2.3) + railties (5.2.4.4) + actionpack (= 5.2.4.4) + activesupport (= 5.2.4.4) method_source rake (>= 0.8.7) thor (>= 0.19.0, < 2.0) - rake (13.0.0) - rb-fsevent (0.10.3) - rb-inotify (0.10.0) + rake (13.0.1) + rb-fsevent (0.10.4) + rb-inotify (0.10.1) ffi (~> 1.0) - regexp_parser (1.6.0) - responders (3.0.0) + regexp_parser (1.8.2) + responders (3.0.1) actionpack (>= 5.0) railties (>= 5.0) - rspec-core (3.9.0) - rspec-support (~> 3.9.0) - rspec-expectations (3.9.0) + rspec-core (3.10.0) + rspec-support (~> 3.10.0) + rspec-expectations (3.10.0) diff-lcs (>= 1.2.0, < 2.0) - rspec-support (~> 3.9.0) - rspec-mocks (3.9.0) + rspec-support (~> 3.10.0) + rspec-mocks (3.10.0) diff-lcs (>= 1.2.0, < 2.0) - rspec-support (~> 3.9.0) - rspec-rails (3.9.0) - actionpack (>= 3.0) - activesupport (>= 3.0) - railties (>= 3.0) - rspec-core (~> 3.9.0) - rspec-expectations (~> 3.9.0) - rspec-mocks (~> 3.9.0) - rspec-support (~> 3.9.0) - rspec-support (3.9.0) + rspec-support (~> 3.10.0) + rspec-rails (4.0.1) + actionpack (>= 4.2) + activesupport (>= 4.2) + railties (>= 4.2) + rspec-core (~> 3.9) + rspec-expectations (~> 3.9) + rspec-mocks (~> 3.9) + rspec-support (~> 3.9) + rspec-support (3.10.0) ruby_dep (1.5.0) - rubyzip (2.0.0) + rubyzip (2.3.0) sass (3.7.4) sass-listen (~> 4.0.0) sass-listen (4.0.0) @@ -208,44 +226,46 @@ GEM sprockets (>= 2.8, < 4.0) sprockets-rails (>= 2.0, < 4.0) tilt (>= 1.1, < 3) - selenium-webdriver (3.142.6) + selenium-webdriver (3.142.7) childprocess (>= 0.5, < 4.0) rubyzip (>= 1.2.2) - shoulda-matchers (4.1.2) + shoulda-matchers (4.4.1) activesupport (>= 4.2.0) - spring (2.1.0) + spring (2.1.1) spring-watcher-listen (2.0.1) listen (>= 2.7, < 4.0) spring (>= 1.2, < 3.0) sprockets (3.7.2) concurrent-ruby (~> 1.0) rack (> 1, < 3) - sprockets-rails (3.2.1) + sprockets-rails (3.2.2) actionpack (>= 4.0) activesupport (>= 4.0) sprockets (>= 3.0.0) - thor (0.20.3) + sys-uname (1.2.2) + ffi (~> 1.1) + thor (1.0.1) thread_safe (0.3.6) tilt (2.0.10) turbolinks (5.2.1) turbolinks-source (~> 5.2) turbolinks-source (5.2.0) - tzinfo (1.2.5) + tzinfo (1.2.8) thread_safe (~> 0.1) uglifier (4.2.0) execjs (>= 0.3.0, < 3) - warden (1.2.8) - rack (>= 2.0.6) + warden (1.2.9) + rack (>= 2.0.9) web-console (3.7.0) actionview (>= 5.0) activemodel (>= 5.0) bindex (>= 0.4.0) railties (>= 5.0) - webdrivers (4.1.3) + webdrivers (4.4.1) nokogiri (~> 1.6) rubyzip (>= 1.3.0) selenium-webdriver (>= 3.0, < 4.0) - websocket-driver (0.7.1) + websocket-driver (0.7.3) websocket-extensions (>= 0.1.0) websocket-extensions (0.1.5) xpath (3.2.0) diff --git a/app/assets/javascripts/activities.coffee b/app/assets/javascripts/activities.coffee new file mode 100644 index 00000000..24f83d18 --- /dev/null +++ b/app/assets/javascripts/activities.coffee @@ -0,0 +1,3 @@ +# Place all the behaviors and hooks related to the matching controller here. +# All this logic will automatically be available in application.js. +# You can use CoffeeScript in this file: http://coffeescript.org/ diff --git a/app/assets/javascripts/activity_types.coffee b/app/assets/javascripts/activity_types.coffee new file mode 100644 index 00000000..24f83d18 --- /dev/null +++ b/app/assets/javascripts/activity_types.coffee @@ -0,0 +1,3 @@ +# Place all the behaviors and hooks related to the matching controller here. +# All this logic will automatically be available in application.js. +# You can use CoffeeScript in this file: http://coffeescript.org/ diff --git a/app/assets/javascripts/user_activities.coffee b/app/assets/javascripts/user_activities.coffee new file mode 100644 index 00000000..24f83d18 --- /dev/null +++ b/app/assets/javascripts/user_activities.coffee @@ -0,0 +1,3 @@ +# Place all the behaviors and hooks related to the matching controller here. +# All this logic will automatically be available in application.js. +# You can use CoffeeScript in this file: http://coffeescript.org/ diff --git a/app/assets/stylesheets/activities.scss b/app/assets/stylesheets/activities.scss new file mode 100644 index 00000000..2b1364ef --- /dev/null +++ b/app/assets/stylesheets/activities.scss @@ -0,0 +1,3 @@ +// Place all the styles related to the Activities controller here. +// They will automatically be included in application.css. +// You can use Sass (SCSS) here: http://sass-lang.com/ diff --git a/app/assets/stylesheets/activity_types.scss b/app/assets/stylesheets/activity_types.scss new file mode 100644 index 00000000..6a124a62 --- /dev/null +++ b/app/assets/stylesheets/activity_types.scss @@ -0,0 +1,3 @@ +// Place all the styles related to the ActivityTypes controller here. +// They will automatically be included in application.css. +// You can use Sass (SCSS) here: http://sass-lang.com/ diff --git a/app/assets/stylesheets/scaffolds.scss b/app/assets/stylesheets/scaffolds.scss new file mode 100644 index 00000000..60451880 --- /dev/null +++ b/app/assets/stylesheets/scaffolds.scss @@ -0,0 +1,84 @@ +body { + background-color: #fff; + color: #333; + margin: 33px; + font-family: verdana, arial, helvetica, sans-serif; + font-size: 13px; + line-height: 18px; +} + +p, ol, ul, td { + font-family: verdana, arial, helvetica, sans-serif; + font-size: 13px; + line-height: 18px; +} + +pre { + background-color: #eee; + padding: 10px; + font-size: 11px; +} + +a { + color: #000; + + &:visited { + color: #666; + } + + &:hover { + color: #fff; + background-color: #000; + } +} + +th { + padding-bottom: 5px; +} + +td { + padding: 0 5px 7px; +} + +div { + &.field, &.actions { + margin-bottom: 10px; + } +} + +#notice { + color: green; +} + +.field_with_errors { + padding: 2px; + background-color: red; + display: table; +} + +#error_explanation { + width: 450px; + border: 2px solid red; + padding: 7px 7px 0; + margin-bottom: 20px; + background-color: #f0f0f0; + + h2 { + text-align: left; + font-weight: bold; + padding: 5px 5px 5px 15px; + font-size: 12px; + margin: -7px -7px 0; + background-color: #c00; + color: #fff; + } + + ul li { + font-size: 12px; + list-style: square; + } +} + +label { + display: block; +} diff --git a/app/assets/stylesheets/user_activities.scss b/app/assets/stylesheets/user_activities.scss new file mode 100644 index 00000000..5d2fe634 --- /dev/null +++ b/app/assets/stylesheets/user_activities.scss @@ -0,0 +1,3 @@ +// Place all the styles related to the UserActivities controller here. +// They will automatically be included in application.css. +// You can use Sass (SCSS) here: http://sass-lang.com/ diff --git a/app/controllers/activities_controller.rb b/app/controllers/activities_controller.rb new file mode 100644 index 00000000..31deb2e4 --- /dev/null +++ b/app/controllers/activities_controller.rb @@ -0,0 +1,74 @@ +class ActivitiesController < ApplicationController + before_action :set_activity, only: [:show, :edit, :update, :destroy] + + # GET /activities + # GET /activities.json + def index + @activities = Activity.all + end + + # GET /activities/1 + # GET /activities/1.json + def show + end + + # GET /activities/new + def new + @activity = Activity.new + end + + # GET /activities/1/edit + def edit + end + + # POST /activities + # POST /activities.json + def create + @activity = Activity.new(activity_params) + + respond_to do |format| + if @activity.save + format.html { redirect_to @activity, notice: 'Activity was successfully created.' } + format.json { render :show, status: :created, location: @activity } + else + format.html { render :new } + format.json { render json: @activity.errors, status: :unprocessable_entity } + end + end + end + + # PATCH/PUT /activities/1 + # PATCH/PUT /activities/1.json + def update + respond_to do |format| + if @activity.update(activity_params) + format.html { redirect_to @activity, notice: 'Activity was successfully updated.' } + format.json { render :show, status: :ok, location: @activity } + else + format.html { render :edit } + format.json { render json: @activity.errors, status: :unprocessable_entity } + end + end + end + + # DELETE /activities/1 + # DELETE /activities/1.json + def destroy + @activity.destroy + respond_to do |format| + format.html { redirect_to activities_url, notice: 'Activity was successfully destroyed.' } + format.json { head :no_content } + end + end + + private + # Use callbacks to share common setup or constraints between actions. + def set_activity + @activity = Activity.find(params[:id]) + end + + # Only allow a list of trusted parameters through. + def activity_params + params.require(:activity).permit(:title, :description, :due_date, :status, :activity_type_id) + end +end diff --git a/app/controllers/activity_types_controller.rb b/app/controllers/activity_types_controller.rb new file mode 100644 index 00000000..5116dbbc --- /dev/null +++ b/app/controllers/activity_types_controller.rb @@ -0,0 +1,74 @@ +class ActivityTypesController < ApplicationController + before_action :set_activity_type, only: [:show, :edit, :update, :destroy] + + # GET /activity_types + # GET /activity_types.json + def index + @activity_types = ActivityType.all + end + + # GET /activity_types/1 + # GET /activity_types/1.json + def show + end + + # GET /activity_types/new + def new + @activity_type = ActivityType.new + end + + # GET /activity_types/1/edit + def edit + end + + # POST /activity_types + # POST /activity_types.json + def create + @activity_type = ActivityType.new(activity_type_params) + + respond_to do |format| + if @activity_type.save + format.html { redirect_to @activity_type, notice: 'Activity type was successfully created.' } + format.json { render :show, status: :created, location: @activity_type } + else + format.html { render :new } + format.json { render json: @activity_type.errors, status: :unprocessable_entity } + end + end + end + + # PATCH/PUT /activity_types/1 + # PATCH/PUT /activity_types/1.json + def update + respond_to do |format| + if @activity_type.update(activity_type_params) + format.html { redirect_to @activity_type, notice: 'Activity type was successfully updated.' } + format.json { render :show, status: :ok, location: @activity_type } + else + format.html { render :edit } + format.json { render json: @activity_type.errors, status: :unprocessable_entity } + end + end + end + + # DELETE /activity_types/1 + # DELETE /activity_types/1.json + def destroy + @activity_type.destroy + respond_to do |format| + format.html { redirect_to activity_types_url, notice: 'Activity type was successfully destroyed.' } + format.json { head :no_content } + end + end + + private + # Use callbacks to share common setup or constraints between actions. + def set_activity_type + @activity_type = ActivityType.find(params[:id]) + end + + # Only allow a list of trusted parameters through. + def activity_type_params + params.require(:activity_type).permit(:title) + end +end diff --git a/app/controllers/home_controller.rb b/app/controllers/home_controller.rb index 357f457a..5deed5db 100644 --- a/app/controllers/home_controller.rb +++ b/app/controllers/home_controller.rb @@ -1,5 +1,5 @@ class HomeController < ApplicationController - before_action :set_word, only: [:index] + # before_action :set_word, only: [:index] def index end diff --git a/app/controllers/user_activities_controller.rb b/app/controllers/user_activities_controller.rb new file mode 100644 index 00000000..ee0b67f1 --- /dev/null +++ b/app/controllers/user_activities_controller.rb @@ -0,0 +1,74 @@ +class UserActivitiesController < ApplicationController + before_action :set_user_activity, only: [:show, :edit, :update, :destroy] + + # GET /user_activities + # GET /user_activities.json + def index + @user_activities = UserActivity.all + end + + # GET /user_activities/1 + # GET /user_activities/1.json + def show + end + + # GET /user_activities/new + def new + @user_activity = UserActivity.new + end + + # GET /user_activities/1/edit + def edit + end + + # POST /user_activities + # POST /user_activities.json + def create + @user_activity = UserActivity.new(user_activity_params) + + respond_to do |format| + if @user_activity.save + format.html { redirect_to @user_activity, notice: 'User activity was successfully created.' } + format.json { render :show, status: :created, location: @user_activity } + else + format.html { render :new } + format.json { render json: @user_activity.errors, status: :unprocessable_entity } + end + end + end + + # PATCH/PUT /user_activities/1 + # PATCH/PUT /user_activities/1.json + def update + respond_to do |format| + if @user_activity.update(user_activity_params) + format.html { redirect_to @user_activity, notice: 'User activity was successfully updated.' } + format.json { render :show, status: :ok, location: @user_activity } + else + format.html { render :edit } + format.json { render json: @user_activity.errors, status: :unprocessable_entity } + end + end + end + + # DELETE /user_activities/1 + # DELETE /user_activities/1.json + def destroy + @user_activity.destroy + respond_to do |format| + format.html { redirect_to user_activities_url, notice: 'User activity was successfully destroyed.' } + format.json { head :no_content } + end + end + + private + # Use callbacks to share common setup or constraints between actions. + def set_user_activity + @user_activity = UserActivity.find(params[:id]) + end + + # Only allow a list of trusted parameters through. + def user_activity_params + params.require(:user_activity).permit(:user_id, :activity_id, :interested, :active) + end +end diff --git a/app/helpers/activities_helper.rb b/app/helpers/activities_helper.rb new file mode 100644 index 00000000..4e9784cc --- /dev/null +++ b/app/helpers/activities_helper.rb @@ -0,0 +1,2 @@ +module ActivitiesHelper +end diff --git a/app/helpers/activity_types_helper.rb b/app/helpers/activity_types_helper.rb new file mode 100644 index 00000000..062ce791 --- /dev/null +++ b/app/helpers/activity_types_helper.rb @@ -0,0 +1,2 @@ +module ActivityTypesHelper +end diff --git a/app/helpers/user_activities_helper.rb b/app/helpers/user_activities_helper.rb new file mode 100644 index 00000000..e948cfad --- /dev/null +++ b/app/helpers/user_activities_helper.rb @@ -0,0 +1,2 @@ +module UserActivitiesHelper +end diff --git a/app/models/activity.rb b/app/models/activity.rb index 757e8e51..abdd9b80 100644 --- a/app/models/activity.rb +++ b/app/models/activity.rb @@ -1,3 +1,4 @@ class Activity < ApplicationRecord - validates :activity_type_id, presence: true + belongs_to :activity_type + has_many_attached :documents end diff --git a/app/models/user_activity.rb b/app/models/user_activity.rb index eaf64d59..03943a3d 100644 --- a/app/models/user_activity.rb +++ b/app/models/user_activity.rb @@ -1,4 +1,4 @@ class UserActivity < ApplicationRecord - belongs_to :user - belongs_to :activity + belongs_to :user + belongs_to :activity end diff --git a/app/views/activities/_activity.json.jbuilder b/app/views/activities/_activity.json.jbuilder new file mode 100644 index 00000000..d7784f97 --- /dev/null +++ b/app/views/activities/_activity.json.jbuilder @@ -0,0 +1,2 @@ +json.extract! activity, :id, :title, :description, :due_date, :status, :activity_type_id, :created_at, :updated_at +json.url activity_url(activity, format: :json) diff --git a/app/views/activities/_form.html.erb b/app/views/activities/_form.html.erb new file mode 100644 index 00000000..96c094c1 --- /dev/null +++ b/app/views/activities/_form.html.erb @@ -0,0 +1,42 @@ +<%= form_with(model: activity, local: true) do |form| %> + <% if activity.errors.any? %> +
+

<%= pluralize(activity.errors.count, "error") %> prohibited this activity from being saved:

+ +
    + <% activity.errors.full_messages.each do |message| %> +
  • <%= message %>
  • + <% end %> +
+
+ <% end %> + +
+ <%= form.label :title %> + <%= form.text_field :title %> +
+ +
+ <%= form.label :description %> + <%= form.text_area :description %> +
+ +
+ <%= form.label :due_date %> + <%= form.date_select :due_date %> +
+ +
+ <%= form.label :status %> + <%= form.number_field :status %> +
+ +
+ <%= form.label :activity_type_id %> + <%= form.text_field :activity_type_id %> +
+ +
+ <%= form.submit %> +
+<% end %> diff --git a/app/views/activities/edit.html.erb b/app/views/activities/edit.html.erb new file mode 100644 index 00000000..fd11026b --- /dev/null +++ b/app/views/activities/edit.html.erb @@ -0,0 +1,6 @@ +

Editing Activity

+ +<%= render 'form', activity: @activity %> + +<%= link_to 'Show', @activity %> | +<%= link_to 'Back', activities_path %> diff --git a/app/views/activities/index.html.erb b/app/views/activities/index.html.erb new file mode 100644 index 00000000..bd4c31de --- /dev/null +++ b/app/views/activities/index.html.erb @@ -0,0 +1,35 @@ +

<%= notice %>

+ +

Activities

+ + + + + + + + + + + + + + + <% @activities.each do |activity| %> + + + + + + + + + + + <% end %> + +
TitleDescriptionDue dateStatusActivity type
<%= activity.title %><%= activity.description %><%= activity.due_date %><%= activity.status %><%= activity.activity_type %><%= link_to 'Show', activity %><%= link_to 'Edit', edit_activity_path(activity) %><%= link_to 'Destroy', activity, method: :delete, data: { confirm: 'Are you sure?' } %>
+ +
+ +<%= link_to 'New Activity', new_activity_path %> diff --git a/app/views/activities/index.json.jbuilder b/app/views/activities/index.json.jbuilder new file mode 100644 index 00000000..865f89ee --- /dev/null +++ b/app/views/activities/index.json.jbuilder @@ -0,0 +1 @@ +json.array! @activities, partial: "activities/activity", as: :activity diff --git a/app/views/activities/new.html.erb b/app/views/activities/new.html.erb new file mode 100644 index 00000000..b4aaf12c --- /dev/null +++ b/app/views/activities/new.html.erb @@ -0,0 +1,5 @@ +

New Activity

+ +<%= render 'form', activity: @activity %> + +<%= link_to 'Back', activities_path %> diff --git a/app/views/activities/show.html.erb b/app/views/activities/show.html.erb new file mode 100644 index 00000000..b58ba68d --- /dev/null +++ b/app/views/activities/show.html.erb @@ -0,0 +1,29 @@ +

<%= notice %>

+ +

+ Title: + <%= @activity.title %> +

+ +

+ Description: + <%= @activity.description %> +

+ +

+ Due date: + <%= @activity.due_date %> +

+ +

+ Status: + <%= @activity.status %> +

+ +

+ Activity type: + <%= @activity.activity_type %> +

+ +<%= link_to 'Edit', edit_activity_path(@activity) %> | +<%= link_to 'Back', activities_path %> diff --git a/app/views/activities/show.json.jbuilder b/app/views/activities/show.json.jbuilder new file mode 100644 index 00000000..a145d0a8 --- /dev/null +++ b/app/views/activities/show.json.jbuilder @@ -0,0 +1 @@ +json.partial! "activities/activity", activity: @activity diff --git a/app/views/activity_types/_activity_type.json.jbuilder b/app/views/activity_types/_activity_type.json.jbuilder new file mode 100644 index 00000000..4051f677 --- /dev/null +++ b/app/views/activity_types/_activity_type.json.jbuilder @@ -0,0 +1,2 @@ +json.extract! activity_type, :id, :title, :created_at, :updated_at +json.url activity_type_url(activity_type, format: :json) diff --git a/app/views/activity_types/_form.html.erb b/app/views/activity_types/_form.html.erb new file mode 100644 index 00000000..1f4cda6b --- /dev/null +++ b/app/views/activity_types/_form.html.erb @@ -0,0 +1,22 @@ +<%= form_with(model: activity_type, local: true) do |form| %> + <% if activity_type.errors.any? %> +
+

<%= pluralize(activity_type.errors.count, "error") %> prohibited this activity_type from being saved:

+ +
    + <% activity_type.errors.full_messages.each do |message| %> +
  • <%= message %>
  • + <% end %> +
+
+ <% end %> + +
+ <%= form.label :title %> + <%= form.text_field :title %> +
+ +
+ <%= form.submit %> +
+<% end %> diff --git a/app/views/activity_types/edit.html.erb b/app/views/activity_types/edit.html.erb new file mode 100644 index 00000000..62010fac --- /dev/null +++ b/app/views/activity_types/edit.html.erb @@ -0,0 +1,6 @@ +

Editing Activity Type

+ +<%= render 'form', activity_type: @activity_type %> + +<%= link_to 'Show', @activity_type %> | +<%= link_to 'Back', activity_types_path %> diff --git a/app/views/activity_types/index.html.erb b/app/views/activity_types/index.html.erb new file mode 100644 index 00000000..d6341a62 --- /dev/null +++ b/app/views/activity_types/index.html.erb @@ -0,0 +1,27 @@ +

<%= notice %>

+ +

Activity Types

+ + + + + + + + + + + <% @activity_types.each do |activity_type| %> + + + + + + + <% end %> + +
Title
<%= activity_type.title %><%= link_to 'Show', activity_type %><%= link_to 'Edit', edit_activity_type_path(activity_type) %><%= link_to 'Destroy', activity_type, method: :delete, data: { confirm: 'Are you sure?' } %>
+ +
+ +<%= link_to 'New Activity Type', new_activity_type_path %> diff --git a/app/views/activity_types/index.json.jbuilder b/app/views/activity_types/index.json.jbuilder new file mode 100644 index 00000000..88dfcb88 --- /dev/null +++ b/app/views/activity_types/index.json.jbuilder @@ -0,0 +1 @@ +json.array! @activity_types, partial: "activity_types/activity_type", as: :activity_type diff --git a/app/views/activity_types/new.html.erb b/app/views/activity_types/new.html.erb new file mode 100644 index 00000000..8baa8b2b --- /dev/null +++ b/app/views/activity_types/new.html.erb @@ -0,0 +1,5 @@ +

New Activity Type

+ +<%= render 'form', activity_type: @activity_type %> + +<%= link_to 'Back', activity_types_path %> diff --git a/app/views/activity_types/show.html.erb b/app/views/activity_types/show.html.erb new file mode 100644 index 00000000..16e6b02d --- /dev/null +++ b/app/views/activity_types/show.html.erb @@ -0,0 +1,9 @@ +

<%= notice %>

+ +

+ Title: + <%= @activity_type.title %> +

+ +<%= link_to 'Edit', edit_activity_type_path(@activity_type) %> | +<%= link_to 'Back', activity_types_path %> diff --git a/app/views/activity_types/show.json.jbuilder b/app/views/activity_types/show.json.jbuilder new file mode 100644 index 00000000..6b9e9179 --- /dev/null +++ b/app/views/activity_types/show.json.jbuilder @@ -0,0 +1 @@ +json.partial! "activity_types/activity_type", activity_type: @activity_type diff --git a/app/views/home/index.html.erb b/app/views/home/index.html.erb index 83afd49c..33ba387d 100644 --- a/app/views/home/index.html.erb +++ b/app/views/home/index.html.erb @@ -2,7 +2,6 @@

Find me in app/views/home/index.html.erb

<% if user_signed_in? %> - <%= @word %>

Usuário atual

Nome: <%= current_user.full_name %>

Email: <%= current_user.email %>

diff --git a/app/views/user_activities/_form.html.erb b/app/views/user_activities/_form.html.erb new file mode 100644 index 00000000..2e04f181 --- /dev/null +++ b/app/views/user_activities/_form.html.erb @@ -0,0 +1,37 @@ +<%= form_with(model: user_activity, local: true) do |form| %> + <% if user_activity.errors.any? %> +
+

<%= pluralize(user_activity.errors.count, "error") %> prohibited this user_activity from being saved:

+ +
    + <% user_activity.errors.full_messages.each do |message| %> +
  • <%= message %>
  • + <% end %> +
+
+ <% end %> + +
+ <%= form.label :user_id %> + <%= form.text_field :user_id %> +
+ +
+ <%= form.label :activity_id %> + <%= form.text_field :activity_id %> +
+ +
+ <%= form.label :interested %> + <%= form.check_box :interested %> +
+ +
+ <%= form.label :active %> + <%= form.check_box :active %> +
+ +
+ <%= form.submit %> +
+<% end %> diff --git a/app/views/user_activities/_user_activity.json.jbuilder b/app/views/user_activities/_user_activity.json.jbuilder new file mode 100644 index 00000000..d495643b --- /dev/null +++ b/app/views/user_activities/_user_activity.json.jbuilder @@ -0,0 +1,2 @@ +json.extract! user_activity, :id, :user_id, :activity_id, :interested, :active, :created_at, :updated_at +json.url user_activity_url(user_activity, format: :json) diff --git a/app/views/user_activities/edit.html.erb b/app/views/user_activities/edit.html.erb new file mode 100644 index 00000000..8a2498c7 --- /dev/null +++ b/app/views/user_activities/edit.html.erb @@ -0,0 +1,6 @@ +

Editing User Activity

+ +<%= render 'form', user_activity: @user_activity %> + +<%= link_to 'Show', @user_activity %> | +<%= link_to 'Back', user_activities_path %> diff --git a/app/views/user_activities/index.html.erb b/app/views/user_activities/index.html.erb new file mode 100644 index 00000000..136ce460 --- /dev/null +++ b/app/views/user_activities/index.html.erb @@ -0,0 +1,33 @@ +

<%= notice %>

+ +

User Activities

+ + + + + + + + + + + + + + <% @user_activities.each do |user_activity| %> + + + + + + + + + + <% end %> + +
UserActivityInterestedActive
<%= user_activity.user %><%= user_activity.activity %><%= user_activity.interested %><%= user_activity.active %><%= link_to 'Show', user_activity %><%= link_to 'Edit', edit_user_activity_path(user_activity) %><%= link_to 'Destroy', user_activity, method: :delete, data: { confirm: 'Are you sure?' } %>
+ +
+ +<%= link_to 'New User Activity', new_user_activity_path %> diff --git a/app/views/user_activities/index.json.jbuilder b/app/views/user_activities/index.json.jbuilder new file mode 100644 index 00000000..e6731e95 --- /dev/null +++ b/app/views/user_activities/index.json.jbuilder @@ -0,0 +1 @@ +json.array! @user_activities, partial: "user_activities/user_activity", as: :user_activity diff --git a/app/views/user_activities/new.html.erb b/app/views/user_activities/new.html.erb new file mode 100644 index 00000000..4f193756 --- /dev/null +++ b/app/views/user_activities/new.html.erb @@ -0,0 +1,5 @@ +

New User Activity

+ +<%= render 'form', user_activity: @user_activity %> + +<%= link_to 'Back', user_activities_path %> diff --git a/app/views/user_activities/show.html.erb b/app/views/user_activities/show.html.erb new file mode 100644 index 00000000..46652a7e --- /dev/null +++ b/app/views/user_activities/show.html.erb @@ -0,0 +1,24 @@ +

<%= notice %>

+ +

+ User: + <%= @user_activity.user %> +

+ +

+ Activity: + <%= @user_activity.activity %> +

+ +

+ Interested: + <%= @user_activity.interested %> +

+ +

+ Active: + <%= @user_activity.active %> +

+ +<%= link_to 'Edit', edit_user_activity_path(@user_activity) %> | +<%= link_to 'Back', user_activities_path %> diff --git a/app/views/user_activities/show.json.jbuilder b/app/views/user_activities/show.json.jbuilder new file mode 100644 index 00000000..8fd2851b --- /dev/null +++ b/app/views/user_activities/show.json.jbuilder @@ -0,0 +1 @@ +json.partial! "user_activities/user_activity", user_activity: @user_activity diff --git a/config/routes.rb b/config/routes.rb index f33f7f68..5a28a811 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,6 +1,9 @@ # frozen_string_literal: true Rails.application.routes.draw do + resources :user_activities + resources :activities + resources :activity_types get 'home/index' devise_for :users # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html diff --git a/db/migrate/20201111004340_create_activities.rb b/db/migrate/20201111004340_create_activities.rb deleted file mode 100644 index 8b516bee..00000000 --- a/db/migrate/20201111004340_create_activities.rb +++ /dev/null @@ -1,21 +0,0 @@ -class CreateActivities < ActiveRecord::Migration[5.2] - def change - create_table :activities do |t| - t.string :title - t.text :description - t.date :due_date - # t.attachment :documents - - t.references :activity_type, foreign_key: true - t.datetime :remember_created_at - t.timestamps null: false - end - - create_table :user_activities do |t| - t.belongs_to :user, foreign_key: true - t.belongs_to :activity, foreign_key: true - end - - add_index :user_activities, %i[user_id activity_id], unique: true - end -end diff --git a/db/migrate/20201111004338_create_activity_types.rb b/db/migrate/20201112014423_create_activity_types.rb similarity index 88% rename from db/migrate/20201111004338_create_activity_types.rb rename to db/migrate/20201112014423_create_activity_types.rb index 5d9a226f..5bd3eaeb 100644 --- a/db/migrate/20201111004338_create_activity_types.rb +++ b/db/migrate/20201112014423_create_activity_types.rb @@ -2,6 +2,8 @@ class CreateActivityTypes < ActiveRecord::Migration[5.2] def change create_table :activity_types do |t| t.string :title + + t.timestamps end end end diff --git a/db/migrate/20201112022823_create_active_storage_tables.active_storage.rb b/db/migrate/20201112022823_create_active_storage_tables.active_storage.rb new file mode 100644 index 00000000..0b2ce257 --- /dev/null +++ b/db/migrate/20201112022823_create_active_storage_tables.active_storage.rb @@ -0,0 +1,27 @@ +# This migration comes from active_storage (originally 20170806125915) +class CreateActiveStorageTables < ActiveRecord::Migration[5.2] + def change + create_table :active_storage_blobs do |t| + t.string :key, null: false + t.string :filename, null: false + t.string :content_type + t.text :metadata + t.bigint :byte_size, null: false + t.string :checksum, null: false + t.datetime :created_at, null: false + + t.index [ :key ], unique: true + end + + create_table :active_storage_attachments do |t| + t.string :name, null: false + t.references :record, null: false, polymorphic: true, index: false + t.references :blob, null: false + + t.datetime :created_at, null: false + + t.index [ :record_type, :record_id, :name, :blob_id ], name: "index_active_storage_attachments_uniqueness", unique: true + t.foreign_key :active_storage_blobs, column: :blob_id + end + end +end diff --git a/db/migrate/20201112030653_create_activities.rb b/db/migrate/20201112030653_create_activities.rb new file mode 100644 index 00000000..c6a7898e --- /dev/null +++ b/db/migrate/20201112030653_create_activities.rb @@ -0,0 +1,13 @@ +class CreateActivities < ActiveRecord::Migration[5.2] + def change + create_table :activities do |t| + t.string :title + t.text :description + t.date :due_date + t.integer :status + t.references :activity_type, foreign_key: true + + t.timestamps + end + end +end diff --git a/db/migrate/20201112030843_create_user_activities.rb b/db/migrate/20201112030843_create_user_activities.rb new file mode 100644 index 00000000..bb9a1d09 --- /dev/null +++ b/db/migrate/20201112030843_create_user_activities.rb @@ -0,0 +1,13 @@ +class CreateUserActivities < ActiveRecord::Migration[5.2] + def change + create_table :user_activities do |t| + t.belongs_to :user, foreign_key: true + t.belongs_to :activity, foreign_key: true + t.boolean :interested + t.boolean :active + + t.timestamps + end + add_index :user_activities, %i[user_id activity_id], unique: true + end +end diff --git a/db/schema.rb b/db/schema.rb index cd357ca3..7e075be2 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,17 +10,38 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 2020_11_11_004340) do +ActiveRecord::Schema.define(version: 2020_11_12_030843) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" + create_table "active_storage_attachments", force: :cascade do |t| + t.string "name", null: false + t.string "record_type", null: false + t.bigint "record_id", null: false + t.bigint "blob_id", null: false + t.datetime "created_at", null: false + t.index ["blob_id"], name: "index_active_storage_attachments_on_blob_id" + t.index ["record_type", "record_id", "name", "blob_id"], name: "index_active_storage_attachments_uniqueness", unique: true + end + + create_table "active_storage_blobs", force: :cascade do |t| + t.string "key", null: false + t.string "filename", null: false + t.string "content_type" + t.text "metadata" + t.bigint "byte_size", null: false + t.string "checksum", null: false + t.datetime "created_at", null: false + t.index ["key"], name: "index_active_storage_blobs_on_key", unique: true + end + create_table "activities", force: :cascade do |t| t.string "title" t.text "description" t.date "due_date" + t.integer "status" t.bigint "activity_type_id" - t.datetime "remember_created_at" t.datetime "created_at", null: false t.datetime "updated_at", null: false t.index ["activity_type_id"], name: "index_activities_on_activity_type_id" @@ -28,11 +49,17 @@ create_table "activity_types", force: :cascade do |t| t.string "title" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false end create_table "user_activities", force: :cascade do |t| t.bigint "user_id" t.bigint "activity_id" + t.boolean "interested" + t.boolean "active" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false t.index ["activity_id"], name: "index_user_activities_on_activity_id" t.index ["user_id", "activity_id"], name: "index_user_activities_on_user_id_and_activity_id", unique: true t.index ["user_id"], name: "index_user_activities_on_user_id" @@ -53,6 +80,7 @@ t.index ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true end + add_foreign_key "active_storage_attachments", "active_storage_blobs", column: "blob_id" add_foreign_key "activities", "activity_types" add_foreign_key "user_activities", "activities" add_foreign_key "user_activities", "users" diff --git a/db/seeds.rb b/db/seeds.rb index 94113f98..cd784e36 100644 --- a/db/seeds.rb +++ b/db/seeds.rb @@ -16,3 +16,4 @@ # Activities ActivityType.destroy_all Activity.destroy_all +UserActivity.destroy_all diff --git a/features.html b/features.html index 04b1344b..e379db88 100644 --- a/features.html +++ b/features.html @@ -1,485 +1,497 @@ -Cucumber +

Cucumber Features

Expand All

Collapse All

# language: pt
#encoding: utf-8

Funcionalidade: Testar

features/spike.feature:5

Cenário:

  1. Dado que existam os seguintes credenciamentos sem prazo definido:
    features/step_definitions/credenciamento_professores_steps.rb:23
    title
    full_name
    Credenciamento 1
    Adalberto
    Credenciamento 2
    Mariano
    Credenciamento 3
    Joel
    Validation failed: User must exist (ActiveRecord::RecordInvalid)
    ./features/step_definitions/credenciamento_professores_steps.rb:28:in `block (2 levels) in 
    ' -./features/step_definitions/credenciamento_professores_steps.rb:25:in `each' -./features/step_definitions/credenciamento_professores_steps.rb:25:in `"que existam os seguintes credenciamentos sem prazo definido:"' -features/spike.feature:6:in `Dado que existam os seguintes credenciamentos sem prazo definido:'
    26        act_id = Activity.create!(title: row['title'], activity_type_id: type_id).id
    -27        usr_id = User.create!(full_name: row['full_name'], email: row['full_name']+"@professor.com", password: row['full_name']+"123", role: "professor", registration: "000000000").id
    -28        UserActivity.create!(activity_id: act_id)
    
    -29    end
    -30end
    -31# gem install syntax to get syntax highlighting
  2. E que eu esteja cadastrado e logado como "Gabriel", "gabriel@admin.com", "gabriel123", "administrator", "200000000"
    features/step_definitions/credenciamento_professores_steps.rb:32
  3. Print maroto :)
      -
    undefined method `manage' for #<Capybara::RackTest::Browser:0x00007fffd5be5c58> (NoMethodError)
    ./features/support/hooks.rb:22:in `add_browser_logs'
    -./features/support/hooks.rb:5:in `After'
    20    current_url = Capybara.current_url.to_s
    -21    # Gather browser logs
    -22    logs = page.driver.browser.manage.logs.get(:browser).map {|line| [line.level, line.message]}
    
    -23   # Remove warnings and info messages
    -24    logs.reject! { |line| ['WARNING', 'INFO'].include?(line.first) }
    -25# gem install syntax to get syntax highlighting
\ No newline at end of file + + + diff --git a/features/spike.feature b/features/spike.feature index d01b8a69..9f0e0d8a 100644 --- a/features/spike.feature +++ b/features/spike.feature @@ -3,9 +3,9 @@ Funcionalidade: Testar Cenário: - Dado que existam os seguintes credenciamentos sem prazo definido: - | title | full_name | - | Credenciamento 1 | Adalberto | - | Credenciamento 2 | Mariano | - | Credenciamento 3 | Joel | - E que eu esteja cadastrado e logado como "Gabriel", "gabriel@admin.com", "gabriel123", "administrator", "200000000" + Dado que eu esteja cadastrado e logado como "Gabriel", "gabriel@admin.com", "gabriel123", "administrator", "200000000" + E que existam os seguintes credenciamentos sem prazo definido: + | activity_title | user_full_name | + | Credenciamento 1 | Adalberto | + | Credenciamento 2 | Mariano | + | Credenciamento 3 | Joel | diff --git a/features/support/hooks.rb b/features/support/hooks.rb index 6049864c..3c8ec40c 100644 --- a/features/support/hooks.rb +++ b/features/support/hooks.rb @@ -11,7 +11,7 @@ def add_screenshot(scenario) nome_cenario = nome_cenario.gsub(' ','_').downcase! screenshot = "log/screenshots/#{nome_cenario}.png" # page.save_screenshot(screenshot) - embed(screenshot, 'image/png', 'Print maroto :)') + attach(screenshot, 'image/png') end def add_browser_logs diff --git a/report.json b/report.json index 21e33f44..2d9641ae 100644 --- a/report.json +++ b/report.json @@ -1 +1 @@ -[{"uri":"features/spike.feature","id":"testar","keyword":"Funcionalidade","name":"Testar","description":"","line":4,"comments":[{"value":"#encoding: utf-8","line":2}],"elements":[{"id":"testar;","keyword":"Cenário","name":"","description":"","line":5,"type":"scenario","before":[{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:14"},"result":{"status":"passed","duration":18200}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:22"},"result":{"status":"passed","duration":10500}}],"steps":[{"keyword":"Dado ","name":"que existam os seguintes credenciamentos sem prazo definido:","line":6,"rows":[{"cells":["title","full_name"]},{"cells":["Credenciamento 1","Adalberto"]},{"cells":["Credenciamento 2","Mariano"]},{"cells":["Credenciamento 3","Joel"]}],"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:23"},"result":{"status":"failed","error_message":"Validation failed: User must exist (ActiveRecord::RecordInvalid)\n./features/step_definitions/credenciamento_professores_steps.rb:28:in `block (2 levels) in \u003cmain\u003e'\n./features/step_definitions/credenciamento_professores_steps.rb:25:in `each'\n./features/step_definitions/credenciamento_professores_steps.rb:25:in `\"que existam os seguintes credenciamentos sem prazo definido:\"'\nfeatures/spike.feature:6:in `Dado que existam os seguintes credenciamentos sem prazo definido:'","duration":66918400}},{"keyword":"E ","name":"que eu esteja cadastrado e logado como \"Gabriel\", \"gabriel@admin.com\", \"gabriel123\", \"administrator\", \"200000000\"","line":11,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:32"},"result":{"status":"skipped"}}],"after":[{"embeddings":[{"mime_type":"image/png","data":"bG9nL3NjcmVlbnNob3RzLy5wbmc="}],"match":{"location":"features/support/hooks.rb:1"},"result":{"status":"failed","error_message":"undefined method `manage' for #\u003cCapybara::RackTest::Browser:0x00007fffd5be5c58\u003e (NoMethodError)\n./features/support/hooks.rb:22:in `add_browser_logs'\n./features/support/hooks.rb:5:in `After'","duration":390200}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:10"},"result":{"status":"passed","duration":24100}}]}]}] \ No newline at end of file +[{"id":"testar","uri":"features/spike.feature","keyword":"Funcionalidade","name":"Testar","description":"","line":4,"elements":[{"id":"testar;","keyword":"Cenário","name":"","description":"","line":5,"type":"scenario","before":[{"match":{"location":"capybara-3.33.0/lib/capybara/cucumber.rb:14"},"result":{"status":"passed","duration":19400}},{"match":{"location":"capybara-3.33.0/lib/capybara/cucumber.rb:22"},"result":{"status":"passed","duration":12400}}],"steps":[{"keyword":"Dado ","name":"que eu esteja cadastrado e logado como \"Gabriel\", \"gabriel@admin.com\", \"gabriel123\", \"administrator\", \"200000000\"","line":6,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:32"},"result":{"status":"passed","duration":272538100}},{"keyword":"E ","name":"que existam os seguintes credenciamentos sem prazo definido:","line":7,"rows":[{"cells":["activity_title","user_full_name"]},{"cells":["Credenciamento 1","Adalberto"]},{"cells":["Credenciamento 2","Mariano"]},{"cells":["Credenciamento 3","Joel"]}],"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:23"},"result":{"status":"passed","duration":76080000}}],"after":[{"embeddings":[{"mime_type":"image/png","data":"bG9nL3NjcmVlbnNob3RzLy5wbmc="}],"match":{"location":"features/support/hooks.rb:1"},"result":{"status":"passed","duration":391500}},{"match":{"location":"capybara-3.33.0/lib/capybara/cucumber.rb:10"},"result":{"status":"passed","duration":82300}}]}]}] \ No newline at end of file diff --git a/spec/helpers/activities_helper_spec.rb b/spec/helpers/activities_helper_spec.rb new file mode 100644 index 00000000..9dc6d2e0 --- /dev/null +++ b/spec/helpers/activities_helper_spec.rb @@ -0,0 +1,15 @@ +require 'rails_helper' + +# Specs in this file have access to a helper object that includes +# the ActivitiesHelper. For example: +# +# describe ActivitiesHelper do +# describe "string concat" do +# it "concats two strings with spaces" do +# expect(helper.concat_strings("this","that")).to eq("this that") +# end +# end +# end +RSpec.describe ActivitiesHelper, type: :helper do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/helpers/activity_types_helper_spec.rb b/spec/helpers/activity_types_helper_spec.rb new file mode 100644 index 00000000..48447f1f --- /dev/null +++ b/spec/helpers/activity_types_helper_spec.rb @@ -0,0 +1,15 @@ +require 'rails_helper' + +# Specs in this file have access to a helper object that includes +# the ActivityTypesHelper. For example: +# +# describe ActivityTypesHelper do +# describe "string concat" do +# it "concats two strings with spaces" do +# expect(helper.concat_strings("this","that")).to eq("this that") +# end +# end +# end +RSpec.describe ActivityTypesHelper, type: :helper do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/helpers/user_activities_helper_spec.rb b/spec/helpers/user_activities_helper_spec.rb new file mode 100644 index 00000000..c1993ae3 --- /dev/null +++ b/spec/helpers/user_activities_helper_spec.rb @@ -0,0 +1,15 @@ +require 'rails_helper' + +# Specs in this file have access to a helper object that includes +# the UserActivitiesHelper. For example: +# +# describe UserActivitiesHelper do +# describe "string concat" do +# it "concats two strings with spaces" do +# expect(helper.concat_strings("this","that")).to eq("this that") +# end +# end +# end +RSpec.describe UserActivitiesHelper, type: :helper do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/models/activity_spec.rb b/spec/models/activity_spec.rb new file mode 100644 index 00000000..b80b07e7 --- /dev/null +++ b/spec/models/activity_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe Activity, type: :model do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/models/user_activity_spec.rb b/spec/models/user_activity_spec.rb new file mode 100644 index 00000000..417dfa25 --- /dev/null +++ b/spec/models/user_activity_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe UserActivity, type: :model do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/rails_helper.rb b/spec/rails_helper.rb index b06351ba..00345af7 100644 --- a/spec/rails_helper.rb +++ b/spec/rails_helper.rb @@ -1,9 +1,7 @@ # This file is copied to spec/ when you run 'rails generate rspec:install' require 'spec_helper' ENV['RAILS_ENV'] ||= 'test' - require File.expand_path('../config/environment', __dir__) - # Prevent database truncation if the environment is production abort("The Rails environment is running in production mode!") if Rails.env.production? require 'rspec/rails' @@ -22,7 +20,7 @@ # directory. Alternatively, in the individual `*_spec.rb` files, manually # require only the support files necessary. # -# Dir[Rails.root.join('spec', 'support', '**', '*.rb')].each { |f| require f } +# Dir[Rails.root.join('spec', 'support', '**', '*.rb')].sort.each { |f| require f } # Checks for pending migrations and applies them before tests are run. # If you are not using ActiveRecord, you can remove these lines. @@ -41,6 +39,9 @@ # instead of true. config.use_transactional_fixtures = true + # You can uncomment this line to turn off ActiveRecord support entirely. + # config.use_active_record = false + # RSpec Rails can automatically mix in different behaviours to your tests # based on their file location, for example enabling you to call `get` and # `post` in specs under `spec/controllers`. @@ -48,7 +49,7 @@ # You can disable this behaviour by removing the line below, and instead # explicitly tag your specs with their type, e.g.: # - # RSpec.describe UsersController, :type => :controller do + # RSpec.describe UsersController, type: :controller do # # ... # end # diff --git a/spec/requests/activities_spec.rb b/spec/requests/activities_spec.rb new file mode 100644 index 00000000..9c3013d5 --- /dev/null +++ b/spec/requests/activities_spec.rb @@ -0,0 +1,129 @@ + require 'rails_helper' + +# This spec was generated by rspec-rails when you ran the scaffold generator. +# It demonstrates how one might use RSpec to test the controller code that +# was generated by Rails when you ran the scaffold generator. +# +# It assumes that the implementation code is generated by the rails scaffold +# generator. If you are using any extension libraries to generate different +# controller code, this generated spec may or may not pass. +# +# It only uses APIs available in rails and/or rspec-rails. There are a number +# of tools you can use to make these specs even more expressive, but we're +# sticking to rails and rspec-rails APIs to keep things simple and stable. + +RSpec.describe "/activities", type: :request do + # Activity. As you add validations to Activity, be sure to + # adjust the attributes here as well. + let(:valid_attributes) { + skip("Add a hash of attributes valid for your model") + } + + let(:invalid_attributes) { + skip("Add a hash of attributes invalid for your model") + } + + describe "GET /index" do + it "renders a successful response" do + Activity.create! valid_attributes + get activities_url + expect(response).to be_successful + end + end + + describe "GET /show" do + it "renders a successful response" do + activity = Activity.create! valid_attributes + get activity_url(activity) + expect(response).to be_successful + end + end + + describe "GET /new" do + it "renders a successful response" do + get new_activity_url + expect(response).to be_successful + end + end + + describe "GET /edit" do + it "render a successful response" do + activity = Activity.create! valid_attributes + get edit_activity_url(activity) + expect(response).to be_successful + end + end + + describe "POST /create" do + context "with valid parameters" do + it "creates a new Activity" do + expect { + post activities_url, params: { activity: valid_attributes } + }.to change(Activity, :count).by(1) + end + + it "redirects to the created activity" do + post activities_url, params: { activity: valid_attributes } + expect(response).to redirect_to(activity_url(Activity.last)) + end + end + + context "with invalid parameters" do + it "does not create a new Activity" do + expect { + post activities_url, params: { activity: invalid_attributes } + }.to change(Activity, :count).by(0) + end + + it "renders a successful response (i.e. to display the 'new' template)" do + post activities_url, params: { activity: invalid_attributes } + expect(response).to be_successful + end + end + end + + describe "PATCH /update" do + context "with valid parameters" do + let(:new_attributes) { + skip("Add a hash of attributes valid for your model") + } + + it "updates the requested activity" do + activity = Activity.create! valid_attributes + patch activity_url(activity), params: { activity: new_attributes } + activity.reload + skip("Add assertions for updated state") + end + + it "redirects to the activity" do + activity = Activity.create! valid_attributes + patch activity_url(activity), params: { activity: new_attributes } + activity.reload + expect(response).to redirect_to(activity_url(activity)) + end + end + + context "with invalid parameters" do + it "renders a successful response (i.e. to display the 'edit' template)" do + activity = Activity.create! valid_attributes + patch activity_url(activity), params: { activity: invalid_attributes } + expect(response).to be_successful + end + end + end + + describe "DELETE /destroy" do + it "destroys the requested activity" do + activity = Activity.create! valid_attributes + expect { + delete activity_url(activity) + }.to change(Activity, :count).by(-1) + end + + it "redirects to the activities list" do + activity = Activity.create! valid_attributes + delete activity_url(activity) + expect(response).to redirect_to(activities_url) + end + end +end diff --git a/spec/requests/activity_types_spec.rb b/spec/requests/activity_types_spec.rb new file mode 100644 index 00000000..554e1abd --- /dev/null +++ b/spec/requests/activity_types_spec.rb @@ -0,0 +1,129 @@ + require 'rails_helper' + +# This spec was generated by rspec-rails when you ran the scaffold generator. +# It demonstrates how one might use RSpec to test the controller code that +# was generated by Rails when you ran the scaffold generator. +# +# It assumes that the implementation code is generated by the rails scaffold +# generator. If you are using any extension libraries to generate different +# controller code, this generated spec may or may not pass. +# +# It only uses APIs available in rails and/or rspec-rails. There are a number +# of tools you can use to make these specs even more expressive, but we're +# sticking to rails and rspec-rails APIs to keep things simple and stable. + +RSpec.describe "/activity_types", type: :request do + # ActivityType. As you add validations to ActivityType, be sure to + # adjust the attributes here as well. + let(:valid_attributes) { + skip("Add a hash of attributes valid for your model") + } + + let(:invalid_attributes) { + skip("Add a hash of attributes invalid for your model") + } + + describe "GET /index" do + it "renders a successful response" do + ActivityType.create! valid_attributes + get activity_types_url + expect(response).to be_successful + end + end + + describe "GET /show" do + it "renders a successful response" do + activity_type = ActivityType.create! valid_attributes + get activity_type_url(activity_type) + expect(response).to be_successful + end + end + + describe "GET /new" do + it "renders a successful response" do + get new_activity_type_url + expect(response).to be_successful + end + end + + describe "GET /edit" do + it "render a successful response" do + activity_type = ActivityType.create! valid_attributes + get edit_activity_type_url(activity_type) + expect(response).to be_successful + end + end + + describe "POST /create" do + context "with valid parameters" do + it "creates a new ActivityType" do + expect { + post activity_types_url, params: { activity_type: valid_attributes } + }.to change(ActivityType, :count).by(1) + end + + it "redirects to the created activity_type" do + post activity_types_url, params: { activity_type: valid_attributes } + expect(response).to redirect_to(activity_type_url(ActivityType.last)) + end + end + + context "with invalid parameters" do + it "does not create a new ActivityType" do + expect { + post activity_types_url, params: { activity_type: invalid_attributes } + }.to change(ActivityType, :count).by(0) + end + + it "renders a successful response (i.e. to display the 'new' template)" do + post activity_types_url, params: { activity_type: invalid_attributes } + expect(response).to be_successful + end + end + end + + describe "PATCH /update" do + context "with valid parameters" do + let(:new_attributes) { + skip("Add a hash of attributes valid for your model") + } + + it "updates the requested activity_type" do + activity_type = ActivityType.create! valid_attributes + patch activity_type_url(activity_type), params: { activity_type: new_attributes } + activity_type.reload + skip("Add assertions for updated state") + end + + it "redirects to the activity_type" do + activity_type = ActivityType.create! valid_attributes + patch activity_type_url(activity_type), params: { activity_type: new_attributes } + activity_type.reload + expect(response).to redirect_to(activity_type_url(activity_type)) + end + end + + context "with invalid parameters" do + it "renders a successful response (i.e. to display the 'edit' template)" do + activity_type = ActivityType.create! valid_attributes + patch activity_type_url(activity_type), params: { activity_type: invalid_attributes } + expect(response).to be_successful + end + end + end + + describe "DELETE /destroy" do + it "destroys the requested activity_type" do + activity_type = ActivityType.create! valid_attributes + expect { + delete activity_type_url(activity_type) + }.to change(ActivityType, :count).by(-1) + end + + it "redirects to the activity_types list" do + activity_type = ActivityType.create! valid_attributes + delete activity_type_url(activity_type) + expect(response).to redirect_to(activity_types_url) + end + end +end diff --git a/spec/requests/user_activities_spec.rb b/spec/requests/user_activities_spec.rb new file mode 100644 index 00000000..31f98d8b --- /dev/null +++ b/spec/requests/user_activities_spec.rb @@ -0,0 +1,129 @@ + require 'rails_helper' + +# This spec was generated by rspec-rails when you ran the scaffold generator. +# It demonstrates how one might use RSpec to test the controller code that +# was generated by Rails when you ran the scaffold generator. +# +# It assumes that the implementation code is generated by the rails scaffold +# generator. If you are using any extension libraries to generate different +# controller code, this generated spec may or may not pass. +# +# It only uses APIs available in rails and/or rspec-rails. There are a number +# of tools you can use to make these specs even more expressive, but we're +# sticking to rails and rspec-rails APIs to keep things simple and stable. + +RSpec.describe "/user_activities", type: :request do + # UserActivity. As you add validations to UserActivity, be sure to + # adjust the attributes here as well. + let(:valid_attributes) { + skip("Add a hash of attributes valid for your model") + } + + let(:invalid_attributes) { + skip("Add a hash of attributes invalid for your model") + } + + describe "GET /index" do + it "renders a successful response" do + UserActivity.create! valid_attributes + get user_activities_url + expect(response).to be_successful + end + end + + describe "GET /show" do + it "renders a successful response" do + user_activity = UserActivity.create! valid_attributes + get user_activity_url(user_activity) + expect(response).to be_successful + end + end + + describe "GET /new" do + it "renders a successful response" do + get new_user_activity_url + expect(response).to be_successful + end + end + + describe "GET /edit" do + it "render a successful response" do + user_activity = UserActivity.create! valid_attributes + get edit_user_activity_url(user_activity) + expect(response).to be_successful + end + end + + describe "POST /create" do + context "with valid parameters" do + it "creates a new UserActivity" do + expect { + post user_activities_url, params: { user_activity: valid_attributes } + }.to change(UserActivity, :count).by(1) + end + + it "redirects to the created user_activity" do + post user_activities_url, params: { user_activity: valid_attributes } + expect(response).to redirect_to(user_activity_url(UserActivity.last)) + end + end + + context "with invalid parameters" do + it "does not create a new UserActivity" do + expect { + post user_activities_url, params: { user_activity: invalid_attributes } + }.to change(UserActivity, :count).by(0) + end + + it "renders a successful response (i.e. to display the 'new' template)" do + post user_activities_url, params: { user_activity: invalid_attributes } + expect(response).to be_successful + end + end + end + + describe "PATCH /update" do + context "with valid parameters" do + let(:new_attributes) { + skip("Add a hash of attributes valid for your model") + } + + it "updates the requested user_activity" do + user_activity = UserActivity.create! valid_attributes + patch user_activity_url(user_activity), params: { user_activity: new_attributes } + user_activity.reload + skip("Add assertions for updated state") + end + + it "redirects to the user_activity" do + user_activity = UserActivity.create! valid_attributes + patch user_activity_url(user_activity), params: { user_activity: new_attributes } + user_activity.reload + expect(response).to redirect_to(user_activity_url(user_activity)) + end + end + + context "with invalid parameters" do + it "renders a successful response (i.e. to display the 'edit' template)" do + user_activity = UserActivity.create! valid_attributes + patch user_activity_url(user_activity), params: { user_activity: invalid_attributes } + expect(response).to be_successful + end + end + end + + describe "DELETE /destroy" do + it "destroys the requested user_activity" do + user_activity = UserActivity.create! valid_attributes + expect { + delete user_activity_url(user_activity) + }.to change(UserActivity, :count).by(-1) + end + + it "redirects to the user_activities list" do + user_activity = UserActivity.create! valid_attributes + delete user_activity_url(user_activity) + expect(response).to redirect_to(user_activities_url) + end + end +end diff --git a/spec/routing/activities_routing_spec.rb b/spec/routing/activities_routing_spec.rb new file mode 100644 index 00000000..929f3082 --- /dev/null +++ b/spec/routing/activities_routing_spec.rb @@ -0,0 +1,38 @@ +require "rails_helper" + +RSpec.describe ActivitiesController, type: :routing do + describe "routing" do + it "routes to #index" do + expect(get: "/activities").to route_to("activities#index") + end + + it "routes to #new" do + expect(get: "/activities/new").to route_to("activities#new") + end + + it "routes to #show" do + expect(get: "/activities/1").to route_to("activities#show", id: "1") + end + + it "routes to #edit" do + expect(get: "/activities/1/edit").to route_to("activities#edit", id: "1") + end + + + it "routes to #create" do + expect(post: "/activities").to route_to("activities#create") + end + + it "routes to #update via PUT" do + expect(put: "/activities/1").to route_to("activities#update", id: "1") + end + + it "routes to #update via PATCH" do + expect(patch: "/activities/1").to route_to("activities#update", id: "1") + end + + it "routes to #destroy" do + expect(delete: "/activities/1").to route_to("activities#destroy", id: "1") + end + end +end diff --git a/spec/routing/activity_types_routing_spec.rb b/spec/routing/activity_types_routing_spec.rb new file mode 100644 index 00000000..271cd219 --- /dev/null +++ b/spec/routing/activity_types_routing_spec.rb @@ -0,0 +1,38 @@ +require "rails_helper" + +RSpec.describe ActivityTypesController, type: :routing do + describe "routing" do + it "routes to #index" do + expect(get: "/activity_types").to route_to("activity_types#index") + end + + it "routes to #new" do + expect(get: "/activity_types/new").to route_to("activity_types#new") + end + + it "routes to #show" do + expect(get: "/activity_types/1").to route_to("activity_types#show", id: "1") + end + + it "routes to #edit" do + expect(get: "/activity_types/1/edit").to route_to("activity_types#edit", id: "1") + end + + + it "routes to #create" do + expect(post: "/activity_types").to route_to("activity_types#create") + end + + it "routes to #update via PUT" do + expect(put: "/activity_types/1").to route_to("activity_types#update", id: "1") + end + + it "routes to #update via PATCH" do + expect(patch: "/activity_types/1").to route_to("activity_types#update", id: "1") + end + + it "routes to #destroy" do + expect(delete: "/activity_types/1").to route_to("activity_types#destroy", id: "1") + end + end +end diff --git a/spec/routing/user_activities_routing_spec.rb b/spec/routing/user_activities_routing_spec.rb new file mode 100644 index 00000000..f414ed01 --- /dev/null +++ b/spec/routing/user_activities_routing_spec.rb @@ -0,0 +1,38 @@ +require "rails_helper" + +RSpec.describe UserActivitiesController, type: :routing do + describe "routing" do + it "routes to #index" do + expect(get: "/user_activities").to route_to("user_activities#index") + end + + it "routes to #new" do + expect(get: "/user_activities/new").to route_to("user_activities#new") + end + + it "routes to #show" do + expect(get: "/user_activities/1").to route_to("user_activities#show", id: "1") + end + + it "routes to #edit" do + expect(get: "/user_activities/1/edit").to route_to("user_activities#edit", id: "1") + end + + + it "routes to #create" do + expect(post: "/user_activities").to route_to("user_activities#create") + end + + it "routes to #update via PUT" do + expect(put: "/user_activities/1").to route_to("user_activities#update", id: "1") + end + + it "routes to #update via PATCH" do + expect(patch: "/user_activities/1").to route_to("user_activities#update", id: "1") + end + + it "routes to #destroy" do + expect(delete: "/user_activities/1").to route_to("user_activities#destroy", id: "1") + end + end +end diff --git a/spec/spike_spec.rb b/spec/spike_spec.rb new file mode 100644 index 00000000..6760d4a2 --- /dev/null +++ b/spec/spike_spec.rb @@ -0,0 +1,7 @@ +require 'rails_helper' + +describe Activity, type: :model do + describe 'bla' do + it 'blah' + end +end diff --git a/spec/views/activities/edit.html.erb_spec.rb b/spec/views/activities/edit.html.erb_spec.rb new file mode 100644 index 00000000..5a3dba0d --- /dev/null +++ b/spec/views/activities/edit.html.erb_spec.rb @@ -0,0 +1,27 @@ +require 'rails_helper' + +RSpec.describe "activities/edit", type: :view do + before(:each) do + @activity = assign(:activity, Activity.create!( + title: "MyString", + description: "MyText", + status: 1, + activity_type: nil + )) + end + + it "renders the edit activity form" do + render + + assert_select "form[action=?][method=?]", activity_path(@activity), "post" do + + assert_select "input[name=?]", "activity[title]" + + assert_select "textarea[name=?]", "activity[description]" + + assert_select "input[name=?]", "activity[status]" + + assert_select "input[name=?]", "activity[activity_type_id]" + end + end +end diff --git a/spec/views/activities/index.html.erb_spec.rb b/spec/views/activities/index.html.erb_spec.rb new file mode 100644 index 00000000..412e885c --- /dev/null +++ b/spec/views/activities/index.html.erb_spec.rb @@ -0,0 +1,28 @@ +require 'rails_helper' + +RSpec.describe "activities/index", type: :view do + before(:each) do + assign(:activities, [ + Activity.create!( + title: "Title", + description: "MyText", + status: 2, + activity_type: nil + ), + Activity.create!( + title: "Title", + description: "MyText", + status: 2, + activity_type: nil + ) + ]) + end + + it "renders a list of activities" do + render + assert_select "tr>td", text: "Title".to_s, count: 2 + assert_select "tr>td", text: "MyText".to_s, count: 2 + assert_select "tr>td", text: 2.to_s, count: 2 + assert_select "tr>td", text: nil.to_s, count: 2 + end +end diff --git a/spec/views/activities/new.html.erb_spec.rb b/spec/views/activities/new.html.erb_spec.rb new file mode 100644 index 00000000..34c98b59 --- /dev/null +++ b/spec/views/activities/new.html.erb_spec.rb @@ -0,0 +1,27 @@ +require 'rails_helper' + +RSpec.describe "activities/new", type: :view do + before(:each) do + assign(:activity, Activity.new( + title: "MyString", + description: "MyText", + status: 1, + activity_type: nil + )) + end + + it "renders new activity form" do + render + + assert_select "form[action=?][method=?]", activities_path, "post" do + + assert_select "input[name=?]", "activity[title]" + + assert_select "textarea[name=?]", "activity[description]" + + assert_select "input[name=?]", "activity[status]" + + assert_select "input[name=?]", "activity[activity_type_id]" + end + end +end diff --git a/spec/views/activities/show.html.erb_spec.rb b/spec/views/activities/show.html.erb_spec.rb new file mode 100644 index 00000000..15671335 --- /dev/null +++ b/spec/views/activities/show.html.erb_spec.rb @@ -0,0 +1,20 @@ +require 'rails_helper' + +RSpec.describe "activities/show", type: :view do + before(:each) do + @activity = assign(:activity, Activity.create!( + title: "Title", + description: "MyText", + status: 2, + activity_type: nil + )) + end + + it "renders attributes in

" do + render + expect(rendered).to match(/Title/) + expect(rendered).to match(/MyText/) + expect(rendered).to match(/2/) + expect(rendered).to match(//) + end +end diff --git a/spec/views/activity_types/edit.html.erb_spec.rb b/spec/views/activity_types/edit.html.erb_spec.rb new file mode 100644 index 00000000..fa976180 --- /dev/null +++ b/spec/views/activity_types/edit.html.erb_spec.rb @@ -0,0 +1,18 @@ +require 'rails_helper' + +RSpec.describe "activity_types/edit", type: :view do + before(:each) do + @activity_type = assign(:activity_type, ActivityType.create!( + title: "MyString" + )) + end + + it "renders the edit activity_type form" do + render + + assert_select "form[action=?][method=?]", activity_type_path(@activity_type), "post" do + + assert_select "input[name=?]", "activity_type[title]" + end + end +end diff --git a/spec/views/activity_types/index.html.erb_spec.rb b/spec/views/activity_types/index.html.erb_spec.rb new file mode 100644 index 00000000..e9c50f77 --- /dev/null +++ b/spec/views/activity_types/index.html.erb_spec.rb @@ -0,0 +1,19 @@ +require 'rails_helper' + +RSpec.describe "activity_types/index", type: :view do + before(:each) do + assign(:activity_types, [ + ActivityType.create!( + title: "Title" + ), + ActivityType.create!( + title: "Title" + ) + ]) + end + + it "renders a list of activity_types" do + render + assert_select "tr>td", text: "Title".to_s, count: 2 + end +end diff --git a/spec/views/activity_types/new.html.erb_spec.rb b/spec/views/activity_types/new.html.erb_spec.rb new file mode 100644 index 00000000..eef89c66 --- /dev/null +++ b/spec/views/activity_types/new.html.erb_spec.rb @@ -0,0 +1,18 @@ +require 'rails_helper' + +RSpec.describe "activity_types/new", type: :view do + before(:each) do + assign(:activity_type, ActivityType.new( + title: "MyString" + )) + end + + it "renders new activity_type form" do + render + + assert_select "form[action=?][method=?]", activity_types_path, "post" do + + assert_select "input[name=?]", "activity_type[title]" + end + end +end diff --git a/spec/views/activity_types/show.html.erb_spec.rb b/spec/views/activity_types/show.html.erb_spec.rb new file mode 100644 index 00000000..cc754e4e --- /dev/null +++ b/spec/views/activity_types/show.html.erb_spec.rb @@ -0,0 +1,14 @@ +require 'rails_helper' + +RSpec.describe "activity_types/show", type: :view do + before(:each) do + @activity_type = assign(:activity_type, ActivityType.create!( + title: "Title" + )) + end + + it "renders attributes in

" do + render + expect(rendered).to match(/Title/) + end +end diff --git a/spec/views/user_activities/edit.html.erb_spec.rb b/spec/views/user_activities/edit.html.erb_spec.rb new file mode 100644 index 00000000..8df9556d --- /dev/null +++ b/spec/views/user_activities/edit.html.erb_spec.rb @@ -0,0 +1,27 @@ +require 'rails_helper' + +RSpec.describe "user_activities/edit", type: :view do + before(:each) do + @user_activity = assign(:user_activity, UserActivity.create!( + user: nil, + activity: nil, + interested: false, + active: false + )) + end + + it "renders the edit user_activity form" do + render + + assert_select "form[action=?][method=?]", user_activity_path(@user_activity), "post" do + + assert_select "input[name=?]", "user_activity[user_id]" + + assert_select "input[name=?]", "user_activity[activity_id]" + + assert_select "input[name=?]", "user_activity[interested]" + + assert_select "input[name=?]", "user_activity[active]" + end + end +end diff --git a/spec/views/user_activities/index.html.erb_spec.rb b/spec/views/user_activities/index.html.erb_spec.rb new file mode 100644 index 00000000..37434f63 --- /dev/null +++ b/spec/views/user_activities/index.html.erb_spec.rb @@ -0,0 +1,28 @@ +require 'rails_helper' + +RSpec.describe "user_activities/index", type: :view do + before(:each) do + assign(:user_activities, [ + UserActivity.create!( + user: nil, + activity: nil, + interested: false, + active: false + ), + UserActivity.create!( + user: nil, + activity: nil, + interested: false, + active: false + ) + ]) + end + + it "renders a list of user_activities" do + render + assert_select "tr>td", text: nil.to_s, count: 2 + assert_select "tr>td", text: nil.to_s, count: 2 + assert_select "tr>td", text: false.to_s, count: 2 + assert_select "tr>td", text: false.to_s, count: 2 + end +end diff --git a/spec/views/user_activities/new.html.erb_spec.rb b/spec/views/user_activities/new.html.erb_spec.rb new file mode 100644 index 00000000..924b69b7 --- /dev/null +++ b/spec/views/user_activities/new.html.erb_spec.rb @@ -0,0 +1,27 @@ +require 'rails_helper' + +RSpec.describe "user_activities/new", type: :view do + before(:each) do + assign(:user_activity, UserActivity.new( + user: nil, + activity: nil, + interested: false, + active: false + )) + end + + it "renders new user_activity form" do + render + + assert_select "form[action=?][method=?]", user_activities_path, "post" do + + assert_select "input[name=?]", "user_activity[user_id]" + + assert_select "input[name=?]", "user_activity[activity_id]" + + assert_select "input[name=?]", "user_activity[interested]" + + assert_select "input[name=?]", "user_activity[active]" + end + end +end diff --git a/spec/views/user_activities/show.html.erb_spec.rb b/spec/views/user_activities/show.html.erb_spec.rb new file mode 100644 index 00000000..898962ea --- /dev/null +++ b/spec/views/user_activities/show.html.erb_spec.rb @@ -0,0 +1,20 @@ +require 'rails_helper' + +RSpec.describe "user_activities/show", type: :view do + before(:each) do + @user_activity = assign(:user_activity, UserActivity.create!( + user: nil, + activity: nil, + interested: false, + active: false + )) + end + + it "renders attributes in

" do + render + expect(rendered).to match(//) + expect(rendered).to match(//) + expect(rendered).to match(/false/) + expect(rendered).to match(/false/) + end +end From adfc036d65daca7b7ed931e2c952ac3129686a44 Mon Sep 17 00:00:00 2001 From: ngsylar Date: Thu, 12 Nov 2020 02:47:14 -0300 Subject: [PATCH 17/36] Spec for ActivityType model --- app/models/activity.rb | 7 +++++ spec/models/activity_spec.rb | 10 ++++++- spec/models/activity_type_spec.rb | 11 +++++++- spec/models/user_activity_spec.rb | 10 ++++++- spec/views/activities/edit.html.erb_spec.rb | 27 ------------------ spec/views/activities/index.html.erb_spec.rb | 28 ------------------- spec/views/activities/new.html.erb_spec.rb | 27 ------------------ spec/views/activities/show.html.erb_spec.rb | 20 ------------- .../activity_types/edit.html.erb_spec.rb | 18 ------------ .../activity_types/index.html.erb_spec.rb | 19 ------------- .../views/activity_types/new.html.erb_spec.rb | 18 ------------ .../activity_types/show.html.erb_spec.rb | 14 ---------- .../user_activities/edit.html.erb_spec.rb | 27 ------------------ .../user_activities/index.html.erb_spec.rb | 28 ------------------- .../user_activities/new.html.erb_spec.rb | 27 ------------------ .../user_activities/show.html.erb_spec.rb | 20 ------------- 16 files changed, 35 insertions(+), 276 deletions(-) delete mode 100644 spec/views/activities/edit.html.erb_spec.rb delete mode 100644 spec/views/activities/index.html.erb_spec.rb delete mode 100644 spec/views/activities/new.html.erb_spec.rb delete mode 100644 spec/views/activities/show.html.erb_spec.rb delete mode 100644 spec/views/activity_types/edit.html.erb_spec.rb delete mode 100644 spec/views/activity_types/index.html.erb_spec.rb delete mode 100644 spec/views/activity_types/new.html.erb_spec.rb delete mode 100644 spec/views/activity_types/show.html.erb_spec.rb delete mode 100644 spec/views/user_activities/edit.html.erb_spec.rb delete mode 100644 spec/views/user_activities/index.html.erb_spec.rb delete mode 100644 spec/views/user_activities/new.html.erb_spec.rb delete mode 100644 spec/views/user_activities/show.html.erb_spec.rb diff --git a/app/models/activity.rb b/app/models/activity.rb index abdd9b80..72fefc26 100644 --- a/app/models/activity.rb +++ b/app/models/activity.rb @@ -1,4 +1,11 @@ class Activity < ApplicationRecord belongs_to :activity_type has_many_attached :documents + + enum status: { + waiting: 0, + accepted: 1, + rejected: 2, + reformation: 3 + } end diff --git a/spec/models/activity_spec.rb b/spec/models/activity_spec.rb index b80b07e7..0b922853 100644 --- a/spec/models/activity_spec.rb +++ b/spec/models/activity_spec.rb @@ -1,5 +1,13 @@ require 'rails_helper' RSpec.describe Activity, type: :model do - pending "add some examples to (or delete) #{__FILE__}" + context 'valid accreditation' do + it 'has a known status and has documents' + end + + context 'invalid accreditation' do + it 'has no status' + it 'has an unknown status' + it 'has no documents' + end end diff --git a/spec/models/activity_type_spec.rb b/spec/models/activity_type_spec.rb index 5541b8e6..0d2d638b 100644 --- a/spec/models/activity_type_spec.rb +++ b/spec/models/activity_type_spec.rb @@ -1,5 +1,14 @@ require 'rails_helper' RSpec.describe ActivityType, type: :model do - pending "add some examples to (or delete) #{__FILE__}" + describe 'validade an activity type' do + it 'is valid' do + activity = ActivityType.new(title: 'Credenciamento') + expect(activity).to be_valid + end + it 'is invalid' do + activity = ActivityType.new + expect(activity).to_not be_valid + end + end end diff --git a/spec/models/user_activity_spec.rb b/spec/models/user_activity_spec.rb index 417dfa25..ae01e056 100644 --- a/spec/models/user_activity_spec.rb +++ b/spec/models/user_activity_spec.rb @@ -1,5 +1,13 @@ require 'rails_helper' RSpec.describe UserActivity, type: :model do - pending "add some examples to (or delete) #{__FILE__}" + context "a user's activity is valid" do + it 'is valid has an activity associated with a user' + end + + context "a user's activity is invalid" do + it 'has no activity associated with a user' + it 'has no user associated with an activity' + it 'has neither activity nor a user' + end end diff --git a/spec/views/activities/edit.html.erb_spec.rb b/spec/views/activities/edit.html.erb_spec.rb deleted file mode 100644 index 5a3dba0d..00000000 --- a/spec/views/activities/edit.html.erb_spec.rb +++ /dev/null @@ -1,27 +0,0 @@ -require 'rails_helper' - -RSpec.describe "activities/edit", type: :view do - before(:each) do - @activity = assign(:activity, Activity.create!( - title: "MyString", - description: "MyText", - status: 1, - activity_type: nil - )) - end - - it "renders the edit activity form" do - render - - assert_select "form[action=?][method=?]", activity_path(@activity), "post" do - - assert_select "input[name=?]", "activity[title]" - - assert_select "textarea[name=?]", "activity[description]" - - assert_select "input[name=?]", "activity[status]" - - assert_select "input[name=?]", "activity[activity_type_id]" - end - end -end diff --git a/spec/views/activities/index.html.erb_spec.rb b/spec/views/activities/index.html.erb_spec.rb deleted file mode 100644 index 412e885c..00000000 --- a/spec/views/activities/index.html.erb_spec.rb +++ /dev/null @@ -1,28 +0,0 @@ -require 'rails_helper' - -RSpec.describe "activities/index", type: :view do - before(:each) do - assign(:activities, [ - Activity.create!( - title: "Title", - description: "MyText", - status: 2, - activity_type: nil - ), - Activity.create!( - title: "Title", - description: "MyText", - status: 2, - activity_type: nil - ) - ]) - end - - it "renders a list of activities" do - render - assert_select "tr>td", text: "Title".to_s, count: 2 - assert_select "tr>td", text: "MyText".to_s, count: 2 - assert_select "tr>td", text: 2.to_s, count: 2 - assert_select "tr>td", text: nil.to_s, count: 2 - end -end diff --git a/spec/views/activities/new.html.erb_spec.rb b/spec/views/activities/new.html.erb_spec.rb deleted file mode 100644 index 34c98b59..00000000 --- a/spec/views/activities/new.html.erb_spec.rb +++ /dev/null @@ -1,27 +0,0 @@ -require 'rails_helper' - -RSpec.describe "activities/new", type: :view do - before(:each) do - assign(:activity, Activity.new( - title: "MyString", - description: "MyText", - status: 1, - activity_type: nil - )) - end - - it "renders new activity form" do - render - - assert_select "form[action=?][method=?]", activities_path, "post" do - - assert_select "input[name=?]", "activity[title]" - - assert_select "textarea[name=?]", "activity[description]" - - assert_select "input[name=?]", "activity[status]" - - assert_select "input[name=?]", "activity[activity_type_id]" - end - end -end diff --git a/spec/views/activities/show.html.erb_spec.rb b/spec/views/activities/show.html.erb_spec.rb deleted file mode 100644 index 15671335..00000000 --- a/spec/views/activities/show.html.erb_spec.rb +++ /dev/null @@ -1,20 +0,0 @@ -require 'rails_helper' - -RSpec.describe "activities/show", type: :view do - before(:each) do - @activity = assign(:activity, Activity.create!( - title: "Title", - description: "MyText", - status: 2, - activity_type: nil - )) - end - - it "renders attributes in

" do - render - expect(rendered).to match(/Title/) - expect(rendered).to match(/MyText/) - expect(rendered).to match(/2/) - expect(rendered).to match(//) - end -end diff --git a/spec/views/activity_types/edit.html.erb_spec.rb b/spec/views/activity_types/edit.html.erb_spec.rb deleted file mode 100644 index fa976180..00000000 --- a/spec/views/activity_types/edit.html.erb_spec.rb +++ /dev/null @@ -1,18 +0,0 @@ -require 'rails_helper' - -RSpec.describe "activity_types/edit", type: :view do - before(:each) do - @activity_type = assign(:activity_type, ActivityType.create!( - title: "MyString" - )) - end - - it "renders the edit activity_type form" do - render - - assert_select "form[action=?][method=?]", activity_type_path(@activity_type), "post" do - - assert_select "input[name=?]", "activity_type[title]" - end - end -end diff --git a/spec/views/activity_types/index.html.erb_spec.rb b/spec/views/activity_types/index.html.erb_spec.rb deleted file mode 100644 index e9c50f77..00000000 --- a/spec/views/activity_types/index.html.erb_spec.rb +++ /dev/null @@ -1,19 +0,0 @@ -require 'rails_helper' - -RSpec.describe "activity_types/index", type: :view do - before(:each) do - assign(:activity_types, [ - ActivityType.create!( - title: "Title" - ), - ActivityType.create!( - title: "Title" - ) - ]) - end - - it "renders a list of activity_types" do - render - assert_select "tr>td", text: "Title".to_s, count: 2 - end -end diff --git a/spec/views/activity_types/new.html.erb_spec.rb b/spec/views/activity_types/new.html.erb_spec.rb deleted file mode 100644 index eef89c66..00000000 --- a/spec/views/activity_types/new.html.erb_spec.rb +++ /dev/null @@ -1,18 +0,0 @@ -require 'rails_helper' - -RSpec.describe "activity_types/new", type: :view do - before(:each) do - assign(:activity_type, ActivityType.new( - title: "MyString" - )) - end - - it "renders new activity_type form" do - render - - assert_select "form[action=?][method=?]", activity_types_path, "post" do - - assert_select "input[name=?]", "activity_type[title]" - end - end -end diff --git a/spec/views/activity_types/show.html.erb_spec.rb b/spec/views/activity_types/show.html.erb_spec.rb deleted file mode 100644 index cc754e4e..00000000 --- a/spec/views/activity_types/show.html.erb_spec.rb +++ /dev/null @@ -1,14 +0,0 @@ -require 'rails_helper' - -RSpec.describe "activity_types/show", type: :view do - before(:each) do - @activity_type = assign(:activity_type, ActivityType.create!( - title: "Title" - )) - end - - it "renders attributes in

" do - render - expect(rendered).to match(/Title/) - end -end diff --git a/spec/views/user_activities/edit.html.erb_spec.rb b/spec/views/user_activities/edit.html.erb_spec.rb deleted file mode 100644 index 8df9556d..00000000 --- a/spec/views/user_activities/edit.html.erb_spec.rb +++ /dev/null @@ -1,27 +0,0 @@ -require 'rails_helper' - -RSpec.describe "user_activities/edit", type: :view do - before(:each) do - @user_activity = assign(:user_activity, UserActivity.create!( - user: nil, - activity: nil, - interested: false, - active: false - )) - end - - it "renders the edit user_activity form" do - render - - assert_select "form[action=?][method=?]", user_activity_path(@user_activity), "post" do - - assert_select "input[name=?]", "user_activity[user_id]" - - assert_select "input[name=?]", "user_activity[activity_id]" - - assert_select "input[name=?]", "user_activity[interested]" - - assert_select "input[name=?]", "user_activity[active]" - end - end -end diff --git a/spec/views/user_activities/index.html.erb_spec.rb b/spec/views/user_activities/index.html.erb_spec.rb deleted file mode 100644 index 37434f63..00000000 --- a/spec/views/user_activities/index.html.erb_spec.rb +++ /dev/null @@ -1,28 +0,0 @@ -require 'rails_helper' - -RSpec.describe "user_activities/index", type: :view do - before(:each) do - assign(:user_activities, [ - UserActivity.create!( - user: nil, - activity: nil, - interested: false, - active: false - ), - UserActivity.create!( - user: nil, - activity: nil, - interested: false, - active: false - ) - ]) - end - - it "renders a list of user_activities" do - render - assert_select "tr>td", text: nil.to_s, count: 2 - assert_select "tr>td", text: nil.to_s, count: 2 - assert_select "tr>td", text: false.to_s, count: 2 - assert_select "tr>td", text: false.to_s, count: 2 - end -end diff --git a/spec/views/user_activities/new.html.erb_spec.rb b/spec/views/user_activities/new.html.erb_spec.rb deleted file mode 100644 index 924b69b7..00000000 --- a/spec/views/user_activities/new.html.erb_spec.rb +++ /dev/null @@ -1,27 +0,0 @@ -require 'rails_helper' - -RSpec.describe "user_activities/new", type: :view do - before(:each) do - assign(:user_activity, UserActivity.new( - user: nil, - activity: nil, - interested: false, - active: false - )) - end - - it "renders new user_activity form" do - render - - assert_select "form[action=?][method=?]", user_activities_path, "post" do - - assert_select "input[name=?]", "user_activity[user_id]" - - assert_select "input[name=?]", "user_activity[activity_id]" - - assert_select "input[name=?]", "user_activity[interested]" - - assert_select "input[name=?]", "user_activity[active]" - end - end -end diff --git a/spec/views/user_activities/show.html.erb_spec.rb b/spec/views/user_activities/show.html.erb_spec.rb deleted file mode 100644 index 898962ea..00000000 --- a/spec/views/user_activities/show.html.erb_spec.rb +++ /dev/null @@ -1,20 +0,0 @@ -require 'rails_helper' - -RSpec.describe "user_activities/show", type: :view do - before(:each) do - @user_activity = assign(:user_activity, UserActivity.create!( - user: nil, - activity: nil, - interested: false, - active: false - )) - end - - it "renders attributes in

" do - render - expect(rendered).to match(//) - expect(rendered).to match(//) - expect(rendered).to match(/false/) - expect(rendered).to match(/false/) - end -end From 0da11655a80a807ece117a9aae54519101a7a0bb Mon Sep 17 00:00:00 2001 From: ngsylar Date: Thu, 12 Nov 2020 17:09:18 -0300 Subject: [PATCH 18/36] Spec for UserActivity model --- app/controllers/activities_controller.rb | 2 +- app/models/user_activity.rb | 4 + app/views/activities/_activity.json.jbuilder | 2 +- app/views/activities/_form.html.erb | 9 +- app/views/activities/index.html.erb | 6 +- app/views/activities/show.html.erb | 9 +- .../20201112014423_create_activity_types.rb | 2 - .../20201112030653_create_activities.rb | 3 +- .../20201112030843_create_user_activities.rb | 2 - db/schema.rb | 7 +- features.html | 126 +++++++++--------- report.json | 2 +- spec/fixtures/activities.yml | 4 + spec/fixtures/users.yml | 11 ++ spec/models/user_activity_spec.rb | 38 +++++- 15 files changed, 139 insertions(+), 88 deletions(-) create mode 100644 spec/fixtures/activities.yml create mode 100644 spec/fixtures/users.yml diff --git a/app/controllers/activities_controller.rb b/app/controllers/activities_controller.rb index 31deb2e4..744f5008 100644 --- a/app/controllers/activities_controller.rb +++ b/app/controllers/activities_controller.rb @@ -69,6 +69,6 @@ def set_activity # Only allow a list of trusted parameters through. def activity_params - params.require(:activity).permit(:title, :description, :due_date, :status, :activity_type_id) + params.require(:activity).permit(:title, :description, :start_date, :end_date, :status, :activity_type_id) end end diff --git a/app/models/user_activity.rb b/app/models/user_activity.rb index 03943a3d..cea74cfc 100644 --- a/app/models/user_activity.rb +++ b/app/models/user_activity.rb @@ -1,4 +1,8 @@ class UserActivity < ApplicationRecord belongs_to :user belongs_to :activity + + # validates :user, presence: true + # validates :activity, presence: true + validates :activity, uniqueness: { scope: :user } end diff --git a/app/views/activities/_activity.json.jbuilder b/app/views/activities/_activity.json.jbuilder index d7784f97..6707942f 100644 --- a/app/views/activities/_activity.json.jbuilder +++ b/app/views/activities/_activity.json.jbuilder @@ -1,2 +1,2 @@ -json.extract! activity, :id, :title, :description, :due_date, :status, :activity_type_id, :created_at, :updated_at +json.extract! activity, :id, :title, :description, :start_date, :end_date, :status, :activity_type_id, :created_at, :updated_at json.url activity_url(activity, format: :json) diff --git a/app/views/activities/_form.html.erb b/app/views/activities/_form.html.erb index 96c094c1..9425ab83 100644 --- a/app/views/activities/_form.html.erb +++ b/app/views/activities/_form.html.erb @@ -22,8 +22,13 @@

- <%= form.label :due_date %> - <%= form.date_select :due_date %> + <%= form.label :start_date %> + <%= form.date_select :start_date %> +
+ +
+ <%= form.label :end_date %> + <%= form.date_select :end_date %>
diff --git a/app/views/activities/index.html.erb b/app/views/activities/index.html.erb index bd4c31de..b54e01e9 100644 --- a/app/views/activities/index.html.erb +++ b/app/views/activities/index.html.erb @@ -7,7 +7,8 @@ Title Description - Due date + Start date + End date Status Activity type @@ -19,7 +20,8 @@ <%= activity.title %> <%= activity.description %> - <%= activity.due_date %> + <%= activity.start_date %> + <%= activity.end_date %> <%= activity.status %> <%= activity.activity_type %> <%= link_to 'Show', activity %> diff --git a/app/views/activities/show.html.erb b/app/views/activities/show.html.erb index b58ba68d..c2a64cf8 100644 --- a/app/views/activities/show.html.erb +++ b/app/views/activities/show.html.erb @@ -11,8 +11,13 @@

- Due date: - <%= @activity.due_date %> + Start date: + <%= @activity.start_date %> +

+ +

+ End date: + <%= @activity.end_date %>

diff --git a/db/migrate/20201112014423_create_activity_types.rb b/db/migrate/20201112014423_create_activity_types.rb index 5bd3eaeb..5d9a226f 100644 --- a/db/migrate/20201112014423_create_activity_types.rb +++ b/db/migrate/20201112014423_create_activity_types.rb @@ -2,8 +2,6 @@ class CreateActivityTypes < ActiveRecord::Migration[5.2] def change create_table :activity_types do |t| t.string :title - - t.timestamps end end end diff --git a/db/migrate/20201112030653_create_activities.rb b/db/migrate/20201112030653_create_activities.rb index c6a7898e..67d6ed9c 100644 --- a/db/migrate/20201112030653_create_activities.rb +++ b/db/migrate/20201112030653_create_activities.rb @@ -3,7 +3,8 @@ def change create_table :activities do |t| t.string :title t.text :description - t.date :due_date + t.date :start_date + t.date :end_date t.integer :status t.references :activity_type, foreign_key: true diff --git a/db/migrate/20201112030843_create_user_activities.rb b/db/migrate/20201112030843_create_user_activities.rb index bb9a1d09..aa95b011 100644 --- a/db/migrate/20201112030843_create_user_activities.rb +++ b/db/migrate/20201112030843_create_user_activities.rb @@ -5,8 +5,6 @@ def change t.belongs_to :activity, foreign_key: true t.boolean :interested t.boolean :active - - t.timestamps end add_index :user_activities, %i[user_id activity_id], unique: true end diff --git a/db/schema.rb b/db/schema.rb index 7e075be2..d344ecf0 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -39,7 +39,8 @@ create_table "activities", force: :cascade do |t| t.string "title" t.text "description" - t.date "due_date" + t.date "start_date" + t.date "end_date" t.integer "status" t.bigint "activity_type_id" t.datetime "created_at", null: false @@ -49,8 +50,6 @@ create_table "activity_types", force: :cascade do |t| t.string "title" - t.datetime "created_at", null: false - t.datetime "updated_at", null: false end create_table "user_activities", force: :cascade do |t| @@ -58,8 +57,6 @@ t.bigint "activity_id" t.boolean "interested" t.boolean "active" - t.datetime "created_at", null: false - t.datetime "updated_at", null: false t.index ["activity_id"], name: "index_user_activities_on_activity_id" t.index ["user_id", "activity_id"], name: "index_user_activities_on_user_id_and_activity_id", unique: true t.index ["user_id"], name: "index_user_activities_on_user_id" diff --git a/features.html b/features.html index e379db88..ca98c1f4 100644 --- a/features.html +++ b/features.html @@ -303,70 +303,70 @@ - - - +function moveProgressBar(percentDone) { + $("cucumber-header").css('width', percentDone +"%"); +} +function makeRed(element_id) { + $('#'+element_id).css('background', '#C40D0D'); + $('#'+element_id).css('color', '#FFFFFF'); +} +function makeYellow(element_id) { + $('#'+element_id).css('background', '#FAF834'); + $('#'+element_id).css('color', '#000000'); +}

Cucumber Features

Expand All

Collapse All

# language: pt
#encoding: utf-8

Funcionalidade: Abrir solicitação de credenciamento

Como professor autenticado no sistema,
Quero poder abrir uma solicitação de credenciamento
Para que eu possa ser um professor credenciado

Contexto

  1. Dado que eu estou cadastrado e logado como "Lucas", "lucas@professor.com", "lucas123", "professor", "200000000"
    features/step_definitions/credenciamento_professores_steps.rb:8
  2. E que eu estou na página de abrir solicitação de credenciamento
    features/step_definitions/credenciamento_professores_steps.rb:30
    Can't find mapping from "de abrir solicitação de credenciamento" to a path.
    +Now, go and add a mapping in /mnt/c/Users/Fontenelle/Desktop/UnB/9 semestre/Engenharia de Software/secretaria_ppgi/features/support/paths.rb
    ./features/support/paths.rb:31:in `rescue in path_to'
    +./features/support/paths.rb:26:in `path_to'
    +./features/step_definitions/credenciamento_professores_steps.rb:31:in `/^que eu estou na página (.+)$/'
    +features/abrir_solicitacao_credenciamento.feature:11:in `E que eu estou na página de abrir solicitação de credenciamento'
    29        self.send(path_components.push('path').join('_').to_sym)
    +30      rescue NoMethodError, ArgumentError
    +31        raise "Can't find mapping from \"#{page_name}\" to a path.\n" +
    +32          "Now, go and add a mapping in #{__FILE__}"
    +33      end
    +34# gem install syntax to get syntax highlighting
features/abrir_solicitacao_credenciamento.feature:13

Cenário: Solicitação enviada com sucesso

  1. Quando eu anexo o arquivo "Formulário de Credenciamento.pdf" no campo 'Formulario'
    features/abrir_solicitacao_credenciamento.feature:14
    Quando("eu anexo o arquivo {string} no campo {string}") do |string, string2|
    +  pending # Write code here that turns the phrase above into concrete actions
    +end
  2. E eu anexo o arquivo "CV Lattes.pdf" em 'CV Lattes'
    features/step_definitions/credenciamento_professores_steps.rb:34
  3. E eu clico em 'Enviar'
    features/step_definitions/credenciamento_professores_steps.rb:38
  4. Então eu devo ver "Solicitação enviada com sucesso"
    features/step_definitions/credenciamento_professores_steps.rb:67
  5. Print maroto :)
      +
    undefined method `manage' for #<Capybara::RackTest::Browser:0x00007fffcd7263a0> (NoMethodError)
    ./features/support/hooks.rb:22:in `add_browser_logs'
    +./features/support/hooks.rb:5:in `After'
    20    current_url = Capybara.current_url.to_s
    +21    # Gather browser logs
    +22    logs = page.driver.browser.manage.logs.get(:browser).map {|line| [line.level, line.message]}
    
    +23   # Remove warnings and info messages
    +24    logs.reject! { |line| ['WARNING', 'INFO'].include?(line.first) }
    +25# gem install syntax to get syntax highlighting
features/abrir_solicitacao_credenciamento.feature:19

Cenário: Solicitação não enviada (campo obrigatório em branco)

  1. Quando eu anexo o arquivo "Formulário de Credenciamento.pdf" no campo 'Formulario'
    features/abrir_solicitacao_credenciamento.feature:20
    Quando("eu anexo o arquivo {string} no campo {string}") do |string, string2|
    +  pending # Write code here that turns the phrase above into concrete actions
    +end
  2. E eu clico em 'Enviar'
    features/step_definitions/credenciamento_professores_steps.rb:38
  3. Então eu devo ver "Solicitação não enviada (campo obrigatório* em branco)"
    features/step_definitions/credenciamento_professores_steps.rb:67
  4. Print maroto :)
      +
    undefined method `manage' for #<Capybara::RackTest::Browser:0x00007fffce93fbb8> (NoMethodError)
    ./features/support/hooks.rb:22:in `add_browser_logs'
    +./features/support/hooks.rb:5:in `After'
    20    current_url = Capybara.current_url.to_s
    +21    # Gather browser logs
    +22    logs = page.driver.browser.manage.logs.get(:browser).map {|line| [line.level, line.message]}
    
    +23   # Remove warnings and info messages
    +24    logs.reject! { |line| ['WARNING', 'INFO'].include?(line.first) }
    +25# gem install syntax to get syntax highlighting
# language: pt
#encoding: utf-8

Funcionalidade: Definir o prazo de credenciamento dos professores

Como um administrador,
para que eu possa credenciar os professores,
eu gostaria de definir o prazo de credenciamento dos professores

Contexto

  1. Dado que eu esteja autenticado como usuario "admin"
    features/credenciamento_periodo.feature:10
    Dado("que eu esteja autenticado como usuario {string}") do |string|
    +  pending # Write code here that turns the phrase above into concrete actions
    +end
  2. E que esteja na página de credenciamento
    features/credenciamento_periodo.feature:11
    Dado("que esteja na página de credenciamento") do
    +  pending # Write code here that turns the phrase above into concrete actions
    +end
features/credenciamento_periodo.feature:13

Cenário: Definir prazo de credenciamento sem data

  1. Quando eu aperto o botão "Definir prazo de credenciamento"
    features/credenciamento_periodo.feature:14
    Quando("eu aperto o botão {string}") do |string|
    +  pending # Write code here that turns the phrase above into concrete actions
    +end
  2. E eu aperto o botão "Salvar período"
    features/credenciamento_periodo.feature:15
    Quando("eu aperto o botão {string}") do |string|
    +  pending # Write code here that turns the phrase above into concrete actions
    +end
  3. Então eu espero ver a mensagem "Insira uma data de início e uma data de término válidas."
    features/credenciamento_periodo.feature:16
    Então("eu espero ver a mensagem {string}") do |string|
    +  pending # Write code here that turns the phrase above into concrete actions
    +end
  4. Print maroto :)
      +
features/credenciamento_periodo.feature:18

Cenário: Definir prazo de credenciamento com data

  1. Quando eu aperto o botão "Definir prazo de credenciamento"
    features/credenciamento_periodo.feature:19
    Quando("eu aperto o botão {string}") do |string|
    +  pending # Write code here that turns the phrase above into concrete actions
    +end
  2. Quando eu adiciono um valor "Início" para "Data de Início"
    features/credenciamento_periodo.feature:20
    Quando("eu adiciono um valor {string} para {string}") do |string, string2|
    +  pending # Write code here that turns the phrase above into concrete actions
    +end
  3. E eu adiciono um valor "Término" para "Data de Término"
    features/credenciamento_periodo.feature:21
    Quando("eu adiciono um valor {string} para {string}") do |string, string2|
    +  pending # Write code here that turns the phrase above into concrete actions
    +end
  4. E eu aperto o botão "Salvar período"
    features/credenciamento_periodo.feature:22
    Quando("eu aperto o botão {string}") do |string|
    +  pending # Write code here that turns the phrase above into concrete actions
    +end
  5. Então eu espero ver a mensagem "Prazo cadastrado com sucesso."
    features/credenciamento_periodo.feature:23
    Então("eu espero ver a mensagem {string}") do |string|
    +  pending # Write code here that turns the phrase above into concrete actions
    +end
  6. Print maroto :)
      +
# language: pt
#encoding: utf-8

Funcionalidade: Gerenciar solicitações de credenciamento

Como um admnistrador do sistema
Quero visualizar uma solicitação de credencimento em aberto
Para decidir se vou aceitar ou recusar tal solicitação

Contexto

  1. Dado que as seguintes solicitações estejam pendentes:
    features/step_definitions/credenciamento_professores_steps.rb:1
    title
    due_date
    activity_type_id
    Solicitação 1
    02-Jan-2021
    Solicitação de credenciamento
    Solicitação 2
    02-Jan-2021
    Solicitação de credenciamento
    Solicitação 3
    02-Jan-2021
    Solicitação de credenciamento
    Solicitação 4
    02-Jan-2021
    Solicitação de credenciamento
    TODO (Cucumber::Pending)
    ./features/step_definitions/credenciamento_professores_steps.rb:2:in `"que as seguintes solicitações estejam pendentes:"'
    +features/gerenciar_solicitacoes_credenciamento.feature:10:in `Dado que as seguintes solicitações estejam pendentes:'
    0Dado "que as seguintes solicitações estejam pendentes:" do |table|
    +1    pending
    +2    # table.hashes.each do |row|
    
    +3    #     Activity.create!(row)
    +4# gem install syntax to get syntax highlighting
  2. E que eu estou cadastrado e logado como "Gabriel", "gabriel@admin.com", "gabriel123", "administrator", "200000000"
    features/step_definitions/credenciamento_professores_steps.rb:8
  3. E que eu estou na página de solicitações de credenciamento
    features/step_definitions/credenciamento_professores_steps.rb:30
features/gerenciar_solicitacoes_credenciamento.feature:20

Cenário: Aceitar uma solicitação de credenciamento

  1. Quando eu clico em "Solicitação 1"
    features/gerenciar_solicitacoes_credenciamento.feature:21
    Quando("eu clico em {string}") do |string|
    +  pending # Write code here that turns the phrase above into concrete actions
    +end
  2. Então eu devo estar na página da "Solicitação 1"
    features/step_definitions/credenciamento_professores_steps.rb:42
  3. Quando eu clico em 'Aprovar'
    features/step_definitions/credenciamento_professores_steps.rb:38
  4. Então eu devo estar na página de solicitações de credenciamento
    features/step_definitions/credenciamento_professores_steps.rb:42
  5. Quando eu desmarco os seguintes estados: Rejeitadas, Reformulação
    features/gerenciar_solicitacoes_credenciamento.feature:25
    Quando("eu desmarco os seguintes estados: Rejeitadas, Reformulação") do
    +  pending # Write code here that turns the phrase above into concrete actions
    +end
  6. E eu marco os seguintes estados: Aprovadas
    features/gerenciar_solicitacoes_credenciamento.feature:26
    Quando("eu marco os seguintes estados: Aprovadas") do
    +  pending # Write code here that turns the phrase above into concrete actions
    +end
  7. E eu aperto 'Atualizar'
    features/step_definitions/credenciamento_professores_steps.rb:63
  8. Então eu devo ver "Solicitação 1"
    features/step_definitions/credenciamento_professores_steps.rb:67
  9. Print maroto :)
      +
features/gerenciar_solicitacoes_credenciamento.feature:30

Cenário: Recusar uma solicitação de credenciamento

  1. Quando eu clico em "Solicitação 2"
    features/gerenciar_solicitacoes_credenciamento.feature:31
    Quando("eu clico em {string}") do |string|
    +  pending # Write code here that turns the phrase above into concrete actions
    +end
  2. Então eu devo estar na página da "Solicitação 2"
    features/step_definitions/credenciamento_professores_steps.rb:42
  3. Quando eu clico em 'Rejeitar'
    features/step_definitions/credenciamento_professores_steps.rb:38
  4. Então eu devo estar na página de solicitações de credenciamento
    features/step_definitions/credenciamento_professores_steps.rb:42
  5. Quando eu desmarco os seguintes estados: Aprovadas, Reformulação
    features/gerenciar_solicitacoes_credenciamento.feature:35
    Quando("eu desmarco os seguintes estados: Aprovadas, Reformulação") do
    +  pending # Write code here that turns the phrase above into concrete actions
    +end
  6. E eu marco os seguintes estados: Rejeitadas
    features/gerenciar_solicitacoes_credenciamento.feature:36
    Quando("eu marco os seguintes estados: Rejeitadas") do
    +  pending # Write code here that turns the phrase above into concrete actions
    +end
  7. E eu aperto 'Atualizar'
    features/step_definitions/credenciamento_professores_steps.rb:63
  8. Então eu devo ver "Solicitação 2"
    features/step_definitions/credenciamento_professores_steps.rb:67
  9. Print maroto :)
      +
# language: pt
#encoding: utf-8

Funcionalidade: Disponibilizar os requisitos necessarios para credenciamento de professores

Como administrador autenticado no sistema,
Quero poder disponibilizar para os professores os requisitos necessários para o credenciamento
Para que eles possam dar procedimento ao credenciamento

Contexto

  1. Dado que eu esteja logado como administrador de email "gp@admin.com" e senha "123"
    features/requisitos_necessarios.feature:10
    Dado("que eu esteja logado como administrador de email {string} e senha {string}") do |string, string2|
    +  pending # Write code here that turns the phrase above into concrete actions
    +end
  2. E não existem requisitos selecionados na página principal
    features/requisitos_necessarios.feature:11
    Dado("não existem requisitos selecionados na página principal") do
    +  pending # Write code here that turns the phrase above into concrete actions
    +end
  3. Quando o administrador clicou no link para alterar documentos necessários para credenciamento
    features/requisitos_necessarios.feature:12
    Quando("o administrador clicou no link para alterar documentos necessários para credenciamento") do
    +  pending # Write code here that turns the phrase above into concrete actions
    +end
features/requisitos_necessarios.feature:14

Cenário: Os campos puderam ser selecionados

  1. Quando eu selecionar os campos
    features/requisitos_necessarios.feature:15
    Quando("eu selecionar os campos") do
    +  pending # Write code here that turns the phrase above into concrete actions
    +end
  2. E eu clicar no botão atualizar requisitos
    features/requisitos_necessarios.feature:16
    Quando("eu clicar no botão atualizar requisitos") do
    +  pending # Write code here that turns the phrase above into concrete actions
    +end
  3. Então eu devo voltar para a página principal aonde aparece meus requisitos selecionados
    features/requisitos_necessarios.feature:17
    Então("eu devo voltar para a página principal aonde aparece meus requisitos selecionados") do
    +  pending # Write code here that turns the phrase above into concrete actions
    +end
  4. Print maroto :)
      +
features/requisitos_necessarios.feature:19

Cenário: Não houveram mudanças feitas

  1. Quando eu não selecionar os campos
    features/requisitos_necessarios.feature:20
    Quando("eu não selecionar os campos") do
    +  pending # Write code here that turns the phrase above into concrete actions
    +end
  2. E eu clicar no botão atualizar requisitos
    features/requisitos_necessarios.feature:21
    Quando("eu clicar no botão atualizar requisitos") do
    +  pending # Write code here that turns the phrase above into concrete actions
    +end
  3. Então eu recebo uma mensagem dizendo que "não houveram mudanças"
    features/requisitos_necessarios.feature:22
    Então("eu recebo uma mensagem dizendo que {string}") do |string|
    +  pending # Write code here that turns the phrase above into concrete actions
    +end
  4. Print maroto :)
      +
# language: pt
#encoding: utf-8

Funcionalidade: Testar

features/spike.feature:5

Cenário:

  1. Dado que eu estou cadastrado e logado como "Gabriel", "gabriel@admin.com", "gabriel123", "administrator", "200000000"
    features/step_definitions/credenciamento_professores_steps.rb:8
  2. Print maroto :)
      +
\ No newline at end of file diff --git a/features/credenciamento_periodo.feature b/features/credenciamento_periodo.feature index 4535551e..f69e603d 100644 --- a/features/credenciamento_periodo.feature +++ b/features/credenciamento_periodo.feature @@ -8,24 +8,24 @@ Funcionalidade: Definir o prazo de credenciamento dos professores Contexto: Dado que existam os seguintes credenciamentos sem prazo definido: - | activity_title | user_full_name | - | Credenciamento 1 | Adalberto | - | Credenciamento 2 | Mariano | - | Credenciamento 3 | Joel | + | accreditation_title | user_full_name | + | Credenciamento 1 | Adalberto | + | Credenciamento 2 | Mariano | + | Credenciamento 3 | Joel | E que eu esteja cadastrado e logado como "Aécio", "aecio@admin.com", "aecio123", "administrator", "200000000" - E que esteja na página de prazos de credenciamento + E que esteja na página de credenciamentos Cenário: Definir prazo inserindo uma data válida Quando eu clico em "Credenciamento 2" Então eu devo estar na página de "Credenciamento 2" - Quando eu seleciono "2022-10-10" como data de 'Prazo' + Quando eu seleciono uma data posterior a atual em 'Prazo' E eu aperto 'Salvar' Então eu devo ver "Prazo cadastrado com sucesso" Cenário: Definir prazo inserindo data inválida Quando eu clico em "Credenciamento 3" Então eu devo estar na página de "Credenciamento 3" - Quando eu seleciono "1990-10-10" como data de 'Prazo' + Quando eu seleciono uma data anterior a atual em 'Prazo' E eu aperto 'Salvar' Então eu devo ver "Prazo não cadastrado - data inválida" \ No newline at end of file diff --git a/features/gerenciar_solicitacoes_credenciamento.feature b/features/gerenciar_solicitacoes_credenciamento.feature index 4bd19949..4e4d3108 100644 --- a/features/gerenciar_solicitacoes_credenciamento.feature +++ b/features/gerenciar_solicitacoes_credenciamento.feature @@ -8,18 +8,17 @@ Funcionalidade: Gerenciar solicitações de credenciamento Contexto: Dado que existam as seguintes solicitações: - | title | activity_type_title | - | Solicitação 1 | Solicitação de credenciamento | - | Solicitação 2 | Solicitação de credenciamento | - | Solicitação 3 | Solicitação de credenciamento | - | Solicitação 4 | Solicitação de credenciamento | + | user_full_name | status | + | Adalberto | Espera | + | Mariano | Espera | + | Joel | Espera | E que eu esteja cadastrado e logado como "Gabriel", "gabriel@admin.com", "gabriel123", "administrator", "200000000" E que eu esteja na página de solicitações de credenciamento Cenário: Aceitar uma solicitação de credenciamento - Quando eu clico em "Solicitação 1" - Então eu devo estar na página de "Solicitação 1" + Quando eu clico em "Adalberto" + Então eu devo estar na página de "Adalberto" Quando eu clico em 'Aprovar' Então eu devo estar na página de solicitações de credenciamento Quando eu desmarco os seguintes estados: Rejeitadas, Reformulação @@ -28,11 +27,11 @@ Funcionalidade: Gerenciar solicitações de credenciamento Então eu devo ver "Solicitação 1" Cenário: Recusar uma solicitação de credenciamento - Quando eu clico em "Solicitação 2" - Então eu devo estar na página de "Solicitação 2" + Quando eu clico em "Mariano" + Então eu devo estar na página de "Mariano" Quando eu clico em 'Rejeitar' Então eu devo estar na página de solicitações de credenciamento Quando eu desmarco os seguintes estados: Aprovadas, Reformulação E eu marco os seguintes estados: Rejeitadas E eu aperto 'Atualizar' - Então eu devo ver "Solicitação 2" + Então eu devo ver "Mariano" diff --git a/features/step_definitions/credenciamento_professores_steps.rb b/features/step_definitions/credenciamento_professores_steps.rb index 5ff79e50..2fead544 100644 --- a/features/step_definitions/credenciamento_professores_steps.rb +++ b/features/step_definitions/credenciamento_professores_steps.rb @@ -11,22 +11,16 @@ def with_scope(locator) World(WithinHelpers) Dado "que existam as seguintes solicitações:" do |table| - table.hashes.each do |row| - type = ActivityType.find_by(title: row['activity_type_title']) - if type == nil - type = ActivityType.create!(title: row['activity_type_title']) - end - Activity.create!(title: row['title'], activity_type_id: type.id) - end + pending + # table.hashes.each do |row| + # end end Dado "que existam os seguintes credenciamentos sem prazo definido:" do |table| type_id = ActivityType.create!(title: 'Credenciamento').id - table.hashes.each do |row| - act_id = Activity.create!(title: row['activity_title'], activity_type_id: type_id).id - usr_id = User.create!(full_name: row['user_full_name'], email: row['user_full_name']+"@professor.com", password: row['user_full_name']+"123", role: "professor", registration: "000000000").id - UserActivity.create!(activity_id: act_id, user_id: usr_id) - end + pending + # table.hashes.each do |row| + # end end Dado /^que eu esteja cadastrado e logado como (.*)$/ do |input| @@ -93,8 +87,14 @@ def with_scope(locator) fill_in(field, :with => text) end -Quando /^eu seleciono "([^"]*)" como data de '([^']*)'$/ do |date, field| - select_date(date, :from => field) +Quando /^eu seleciono uma data posterior a atual em '([^']*)'$/ do |field| + pending + # select_date(date, :from => field) +end + +ndo /^eu seleciono uma data anterior a atual em '([^']*)'$/ do |field| + pending + # select_date(date, :from => field) end Quando /^eu aperto '([^']*)'$/ do |button| diff --git a/report.json b/report.json index 0ae5eabe..43b1702d 100644 --- a/report.json +++ b/report.json @@ -1 +1 @@ -[{"id":"testar","uri":"features/spike.feature","keyword":"Funcionalidade","name":"Testar","description":"","line":4,"elements":[{"id":"testar;","keyword":"Cenário","name":"","description":"","line":5,"type":"scenario","before":[{"match":{"location":"capybara-3.33.0/lib/capybara/cucumber.rb:14"},"result":{"status":"passed","duration":19200}},{"match":{"location":"capybara-3.33.0/lib/capybara/cucumber.rb:22"},"result":{"status":"passed","duration":13800}}],"steps":[{"keyword":"Dado ","name":"que eu esteja cadastrado e logado como \"Gabriel\", \"gabriel@admin.com\", \"gabriel123\", \"administrator\", \"200000000\"","line":6,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:32"},"result":{"status":"passed","duration":358836300}},{"keyword":"E ","name":"que existam os seguintes credenciamentos sem prazo definido:","line":7,"rows":[{"cells":["activity_title","user_full_name"]},{"cells":["Credenciamento 1","Adalberto"]},{"cells":["Credenciamento 2","Mariano"]},{"cells":["Credenciamento 3","Joel"]}],"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:23"},"result":{"status":"passed","duration":110089000}}],"after":[{"embeddings":[{"mime_type":"image/png","data":"bG9nL3NjcmVlbnNob3RzLy5wbmc="}],"match":{"location":"features/support/hooks.rb:1"},"result":{"status":"passed","duration":455000}},{"match":{"location":"capybara-3.33.0/lib/capybara/cucumber.rb:10"},"result":{"status":"passed","duration":28600}}]}]}] \ No newline at end of file +[{"uri":"features/abrir_solicitacao_credenciamento.feature","id":"abrir-solicitação-de-credenciamento","keyword":"Funcionalidade","name":"Abrir solicitação de credenciamento","description":" Como professor autenticado no sistema,\n Quero poder abrir uma solicitação de credenciamento\n Para que eu possa ser um professor credenciado","line":4,"comments":[{"value":"#encoding: utf-8","line":2}],"elements":[{"keyword":"Contexto","name":"","description":"","line":9,"type":"background","before":[{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:14"},"result":{"status":"passed","duration":31300}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:22"},"result":{"status":"passed","duration":19200}}],"steps":[{"keyword":"Dado ","name":"que eu estou cadastrado e logado como \"Lucas\", \"lucas@professor.com\", \"lucas123\", \"professor\", \"200000000\"","line":10,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:8"},"result":{"status":"passed","duration":2212292400}},{"keyword":"E ","name":"que eu estou na página de abrir solicitação de credenciamento","line":11,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:30"},"result":{"status":"failed","error_message":"Can't find mapping from \"de abrir solicitação de credenciamento\" to a path.\nNow, go and add a mapping in /mnt/c/Users/Fontenelle/Desktop/UnB/9 semestre/Engenharia de Software/secretaria_ppgi/features/support/paths.rb (RuntimeError)\n./features/support/paths.rb:31:in `rescue in path_to'\n./features/support/paths.rb:26:in `path_to'\n./features/step_definitions/credenciamento_professores_steps.rb:31:in `/^que eu estou na página (.+)$/'\nfeatures/abrir_solicitacao_credenciamento.feature:11:in `E que eu estou na página de abrir solicitação de credenciamento'","duration":163700}}]},{"id":"abrir-solicitação-de-credenciamento;solicitação-enviada-com-sucesso","keyword":"Cenário","name":"Solicitação enviada com sucesso","description":"","line":13,"type":"scenario","steps":[{"keyword":"Quando ","name":"eu anexo o arquivo \"Formulário de Credenciamento.pdf\" no campo 'Formulario'","line":14,"match":{"location":"features/abrir_solicitacao_credenciamento.feature:14"},"result":{"status":"undefined"}},{"keyword":"E ","name":"eu anexo o arquivo \"CV Lattes.pdf\" em 'CV Lattes'","line":15,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:34"},"result":{"status":"skipped"}},{"keyword":"E ","name":"eu clico em 'Enviar'","line":16,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:38"},"result":{"status":"skipped"}},{"keyword":"Então ","name":"eu devo ver \"Solicitação enviada com sucesso\"","line":17,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:67"},"result":{"status":"skipped"}}],"after":[{"embeddings":[{"mime_type":"image/png","data":"bG9nL3NjcmVlbnNob3RzL3NvbGljaXRhb2VudmlhZGFjb21zdWNlc3NvLnBuZw=="}],"match":{"location":"features/support/hooks.rb:1"},"result":{"status":"failed","error_message":"undefined method `manage' for #\u003cCapybara::RackTest::Browser:0x00007fffcd7263a0\u003e (NoMethodError)\n./features/support/hooks.rb:22:in `add_browser_logs'\n./features/support/hooks.rb:5:in `After'","duration":367500}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:10"},"result":{"status":"passed","duration":24900}}]},{"keyword":"Contexto","name":"","description":"","line":9,"type":"background","before":[{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:14"},"result":{"status":"passed","duration":11000}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:22"},"result":{"status":"passed","duration":9200}}],"steps":[{"keyword":"Dado ","name":"que eu estou cadastrado e logado como \"Lucas\", \"lucas@professor.com\", \"lucas123\", \"professor\", \"200000000\"","line":10,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:8"},"result":{"status":"passed","duration":36932100}},{"keyword":"E ","name":"que eu estou na página de abrir solicitação de credenciamento","line":11,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:30"},"result":{"status":"failed","error_message":"Can't find mapping from \"de abrir solicitação de credenciamento\" to a path.\nNow, go and add a mapping in /mnt/c/Users/Fontenelle/Desktop/UnB/9 semestre/Engenharia de Software/secretaria_ppgi/features/support/paths.rb (RuntimeError)\n./features/support/paths.rb:31:in `rescue in path_to'\n./features/support/paths.rb:26:in `path_to'\n./features/step_definitions/credenciamento_professores_steps.rb:31:in `/^que eu estou na página (.+)$/'\nfeatures/abrir_solicitacao_credenciamento.feature:11:in `E que eu estou na página de abrir solicitação de credenciamento'","duration":125900}}]},{"id":"abrir-solicitação-de-credenciamento;solicitação-não-enviada-(campo-obrigatório-em-branco)","keyword":"Cenário","name":"Solicitação não enviada (campo obrigatório em branco)","description":"","line":19,"type":"scenario","steps":[{"keyword":"Quando ","name":"eu anexo o arquivo \"Formulário de Credenciamento.pdf\" no campo 'Formulario'","line":20,"match":{"location":"features/abrir_solicitacao_credenciamento.feature:20"},"result":{"status":"undefined"}},{"keyword":"E ","name":"eu clico em 'Enviar'","line":21,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:38"},"result":{"status":"skipped"}},{"keyword":"Então ","name":"eu devo ver \"Solicitação não enviada (campo obrigatório* em branco)\"","line":22,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:67"},"result":{"status":"skipped"}}],"after":[{"embeddings":[{"mime_type":"image/png","data":"bG9nL3NjcmVlbnNob3RzL3NvbGljaXRhb25vZW52aWFkYWNhbXBvb2JyaWdhdHJpb2VtYnJhbmNvLnBuZw=="}],"match":{"location":"features/support/hooks.rb:1"},"result":{"status":"failed","error_message":"undefined method `manage' for #\u003cCapybara::RackTest::Browser:0x00007fffce93fbb8\u003e (NoMethodError)\n./features/support/hooks.rb:22:in `add_browser_logs'\n./features/support/hooks.rb:5:in `After'","duration":1180900}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:10"},"result":{"status":"passed","duration":20800}}]}]},{"uri":"features/credenciamento_periodo.feature","id":"definir-o-prazo-de-credenciamento-dos-professores","keyword":"Funcionalidade","name":"Definir o prazo de credenciamento dos professores","description":" Como um administrador,\n para que eu possa credenciar os professores,\n eu gostaria de definir o prazo de credenciamento dos professores","line":4,"comments":[{"value":"#encoding: utf-8","line":2}],"elements":[{"keyword":"Contexto","name":"","description":"","line":9,"type":"background","before":[{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:14"},"result":{"status":"passed","duration":11000}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:22"},"result":{"status":"passed","duration":8700}}],"steps":[{"keyword":"Dado ","name":"que eu esteja autenticado como usuario \"admin\"","line":10,"match":{"location":"features/credenciamento_periodo.feature:10"},"result":{"status":"undefined"}},{"keyword":"E ","name":"que esteja na página de credenciamento","line":11,"match":{"location":"features/credenciamento_periodo.feature:11"},"result":{"status":"undefined"}}]},{"id":"definir-o-prazo-de-credenciamento-dos-professores;definir-prazo-de-credenciamento-sem-data","keyword":"Cenário","name":"Definir prazo de credenciamento sem data","description":"","line":13,"type":"scenario","steps":[{"keyword":"Quando ","name":"eu aperto o botão \"Definir prazo de credenciamento\"","line":14,"match":{"location":"features/credenciamento_periodo.feature:14"},"result":{"status":"undefined"}},{"keyword":"E ","name":"eu aperto o botão \"Salvar período\"","line":15,"match":{"location":"features/credenciamento_periodo.feature:15"},"result":{"status":"undefined"}},{"keyword":"Então ","name":"eu espero ver a mensagem \"Insira uma data de início e uma data de término válidas.\"","line":16,"match":{"location":"features/credenciamento_periodo.feature:16"},"result":{"status":"undefined"}}],"after":[{"embeddings":[{"mime_type":"image/png","data":"bG9nL3NjcmVlbnNob3RzL2RlZmluaXJwcmF6b2RlY3JlZGVuY2lhbWVudG9zZW1kYXRhLnBuZw=="}],"match":{"location":"features/support/hooks.rb:1"},"result":{"status":"passed","duration":217700}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:10"},"result":{"status":"passed","duration":34100}}]},{"keyword":"Contexto","name":"","description":"","line":9,"type":"background","before":[{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:14"},"result":{"status":"passed","duration":12100}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:22"},"result":{"status":"passed","duration":21000}}],"steps":[{"keyword":"Dado ","name":"que eu esteja autenticado como usuario \"admin\"","line":10,"match":{"location":"features/credenciamento_periodo.feature:10"},"result":{"status":"undefined"}},{"keyword":"E ","name":"que esteja na página de credenciamento","line":11,"match":{"location":"features/credenciamento_periodo.feature:11"},"result":{"status":"undefined"}}]},{"id":"definir-o-prazo-de-credenciamento-dos-professores;definir-prazo-de-credenciamento-com-data","keyword":"Cenário","name":"Definir prazo de credenciamento com data","description":"","line":18,"type":"scenario","steps":[{"keyword":"Quando ","name":"eu aperto o botão \"Definir prazo de credenciamento\"","line":19,"match":{"location":"features/credenciamento_periodo.feature:19"},"result":{"status":"undefined"}},{"keyword":"Quando ","name":"eu adiciono um valor \"Início\" para \"Data de Início\"","line":20,"match":{"location":"features/credenciamento_periodo.feature:20"},"result":{"status":"undefined"}},{"keyword":"E ","name":"eu adiciono um valor \"Término\" para \"Data de Término\"","line":21,"match":{"location":"features/credenciamento_periodo.feature:21"},"result":{"status":"undefined"}},{"keyword":"E ","name":"eu aperto o botão \"Salvar período\"","line":22,"match":{"location":"features/credenciamento_periodo.feature:22"},"result":{"status":"undefined"}},{"keyword":"Então ","name":"eu espero ver a mensagem \"Prazo cadastrado com sucesso.\"","line":23,"match":{"location":"features/credenciamento_periodo.feature:23"},"result":{"status":"undefined"}}],"after":[{"embeddings":[{"mime_type":"image/png","data":"bG9nL3NjcmVlbnNob3RzL2RlZmluaXJwcmF6b2RlY3JlZGVuY2lhbWVudG9jb21kYXRhLnBuZw=="}],"match":{"location":"features/support/hooks.rb:1"},"result":{"status":"passed","duration":219300}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:10"},"result":{"status":"passed","duration":23100}}]}]},{"uri":"features/gerenciar_solicitacoes_credenciamento.feature","id":"gerenciar-solicitações-de-credenciamento","keyword":"Funcionalidade","name":"Gerenciar solicitações de credenciamento","description":" Como um admnistrador do sistema\n Quero visualizar uma solicitação de credencimento em aberto\n Para decidir se vou aceitar ou recusar tal solicitação","line":4,"comments":[{"value":"#encoding: utf-8","line":2}],"elements":[{"keyword":"Contexto","name":"","description":"","line":9,"type":"background","before":[{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:14"},"result":{"status":"passed","duration":12900}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:22"},"result":{"status":"passed","duration":9800}}],"steps":[{"keyword":"Dado ","name":"que as seguintes solicitações estejam pendentes:","line":10,"rows":[{"cells":["title","due_date","activity_type_id"]},{"cells":["Solicitação 1","02-Jan-2021","Solicitação de credenciamento"]},{"cells":["Solicitação 2","02-Jan-2021","Solicitação de credenciamento"]},{"cells":["Solicitação 3","02-Jan-2021","Solicitação de credenciamento"]},{"cells":["Solicitação 4","02-Jan-2021","Solicitação de credenciamento"]}],"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:1"},"result":{"status":"pending","error_message":"TODO (Cucumber::Pending)\n./features/step_definitions/credenciamento_professores_steps.rb:2:in `\"que as seguintes solicitações estejam pendentes:\"'\nfeatures/gerenciar_solicitacoes_credenciamento.feature:10:in `Dado que as seguintes solicitações estejam pendentes:'","duration":496800}},{"keyword":"E ","name":"que eu estou cadastrado e logado como \"Gabriel\", \"gabriel@admin.com\", \"gabriel123\", \"administrator\", \"200000000\"","line":17,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:8"},"result":{"status":"skipped"}},{"keyword":"E ","name":"que eu estou na página de solicitações de credenciamento","line":18,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:30"},"result":{"status":"skipped"}}]},{"id":"gerenciar-solicitações-de-credenciamento;aceitar-uma-solicitação-de-credenciamento","keyword":"Cenário","name":"Aceitar uma solicitação de credenciamento","description":"","line":20,"type":"scenario","steps":[{"keyword":"Quando ","name":"eu clico em \"Solicitação 1\"","line":21,"match":{"location":"features/gerenciar_solicitacoes_credenciamento.feature:21"},"result":{"status":"undefined"}},{"keyword":"Então ","name":"eu devo estar na página da \"Solicitação 1\"","line":22,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:42"},"result":{"status":"skipped"}},{"keyword":"Quando ","name":"eu clico em 'Aprovar'","line":23,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:38"},"result":{"status":"skipped"}},{"keyword":"Então ","name":"eu devo estar na página de solicitações de credenciamento","line":24,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:42"},"result":{"status":"skipped"}},{"keyword":"Quando ","name":"eu desmarco os seguintes estados: Rejeitadas, Reformulação","line":25,"match":{"location":"features/gerenciar_solicitacoes_credenciamento.feature:25"},"result":{"status":"undefined"}},{"keyword":"E ","name":"eu marco os seguintes estados: Aprovadas","line":26,"match":{"location":"features/gerenciar_solicitacoes_credenciamento.feature:26"},"result":{"status":"undefined"}},{"keyword":"E ","name":"eu aperto 'Atualizar'","line":27,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:63"},"result":{"status":"skipped"}},{"keyword":"Então ","name":"eu devo ver \"Solicitação 1\"","line":28,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:67"},"result":{"status":"skipped"}}],"after":[{"embeddings":[{"mime_type":"image/png","data":"bG9nL3NjcmVlbnNob3RzL2FjZWl0YXJ1bWFzb2xpY2l0YW9kZWNyZWRlbmNpYW1lbnRvLnBuZw=="}],"match":{"location":"features/support/hooks.rb:1"},"result":{"status":"passed","duration":220200}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:10"},"result":{"status":"passed","duration":25200}}]},{"keyword":"Contexto","name":"","description":"","line":9,"type":"background","before":[{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:14"},"result":{"status":"passed","duration":15900}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:22"},"result":{"status":"passed","duration":12000}}],"steps":[{"keyword":"Dado ","name":"que as seguintes solicitações estejam pendentes:","line":10,"rows":[{"cells":["title","due_date","activity_type_id"]},{"cells":["Solicitação 1","02-Jan-2021","Solicitação de credenciamento"]},{"cells":["Solicitação 2","02-Jan-2021","Solicitação de credenciamento"]},{"cells":["Solicitação 3","02-Jan-2021","Solicitação de credenciamento"]},{"cells":["Solicitação 4","02-Jan-2021","Solicitação de credenciamento"]}],"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:1"},"result":{"status":"pending","error_message":"TODO (Cucumber::Pending)\n./features/step_definitions/credenciamento_professores_steps.rb:2:in `\"que as seguintes solicitações estejam pendentes:\"'\nfeatures/gerenciar_solicitacoes_credenciamento.feature:10:in `Dado que as seguintes solicitações estejam pendentes:'","duration":147300}},{"keyword":"E ","name":"que eu estou cadastrado e logado como \"Gabriel\", \"gabriel@admin.com\", \"gabriel123\", \"administrator\", \"200000000\"","line":17,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:8"},"result":{"status":"skipped"}},{"keyword":"E ","name":"que eu estou na página de solicitações de credenciamento","line":18,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:30"},"result":{"status":"skipped"}}]},{"id":"gerenciar-solicitações-de-credenciamento;recusar-uma-solicitação-de-credenciamento","keyword":"Cenário","name":"Recusar uma solicitação de credenciamento","description":"","line":30,"type":"scenario","steps":[{"keyword":"Quando ","name":"eu clico em \"Solicitação 2\"","line":31,"match":{"location":"features/gerenciar_solicitacoes_credenciamento.feature:31"},"result":{"status":"undefined"}},{"keyword":"Então ","name":"eu devo estar na página da \"Solicitação 2\"","line":32,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:42"},"result":{"status":"skipped"}},{"keyword":"Quando ","name":"eu clico em 'Rejeitar'","line":33,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:38"},"result":{"status":"skipped"}},{"keyword":"Então ","name":"eu devo estar na página de solicitações de credenciamento","line":34,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:42"},"result":{"status":"skipped"}},{"keyword":"Quando ","name":"eu desmarco os seguintes estados: Aprovadas, Reformulação","line":35,"match":{"location":"features/gerenciar_solicitacoes_credenciamento.feature:35"},"result":{"status":"undefined"}},{"keyword":"E ","name":"eu marco os seguintes estados: Rejeitadas","line":36,"match":{"location":"features/gerenciar_solicitacoes_credenciamento.feature:36"},"result":{"status":"undefined"}},{"keyword":"E ","name":"eu aperto 'Atualizar'","line":37,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:63"},"result":{"status":"skipped"}},{"keyword":"Então ","name":"eu devo ver \"Solicitação 2\"","line":38,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:67"},"result":{"status":"skipped"}}],"after":[{"embeddings":[{"mime_type":"image/png","data":"bG9nL3NjcmVlbnNob3RzL3JlY3VzYXJ1bWFzb2xpY2l0YW9kZWNyZWRlbmNpYW1lbnRvLnBuZw=="}],"match":{"location":"features/support/hooks.rb:1"},"result":{"status":"passed","duration":191900}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:10"},"result":{"status":"passed","duration":25600}}]}]},{"uri":"features/requisitos_necessarios.feature","id":"disponibilizar-os-requisitos-necessarios-para-credenciamento-de-professores","keyword":"Funcionalidade","name":"Disponibilizar os requisitos necessarios para credenciamento de professores","description":" Como administrador autenticado no sistema,\n Quero poder disponibilizar para os professores os requisitos necessários para o credenciamento\n Para que eles possam dar procedimento ao credenciamento","line":4,"comments":[{"value":"#encoding: utf-8","line":2}],"elements":[{"keyword":"Contexto","name":"","description":"","line":9,"type":"background","before":[{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:14"},"result":{"status":"passed","duration":12000}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:22"},"result":{"status":"passed","duration":12700}}],"steps":[{"keyword":"Dado ","name":"que eu esteja logado como administrador de email \"gp@admin.com\" e senha \"123\"","line":10,"match":{"location":"features/requisitos_necessarios.feature:10"},"result":{"status":"undefined"}},{"keyword":"E ","name":"não existem requisitos selecionados na página principal","line":11,"match":{"location":"features/requisitos_necessarios.feature:11"},"result":{"status":"undefined"}},{"keyword":"Quando ","name":"o administrador clicou no link para alterar documentos necessários para credenciamento","line":12,"match":{"location":"features/requisitos_necessarios.feature:12"},"result":{"status":"undefined"}}]},{"id":"disponibilizar-os-requisitos-necessarios-para-credenciamento-de-professores;os-campos-puderam-ser-selecionados","keyword":"Cenário","name":"Os campos puderam ser selecionados","description":"","line":14,"type":"scenario","steps":[{"keyword":"Quando ","name":"eu selecionar os campos","line":15,"match":{"location":"features/requisitos_necessarios.feature:15"},"result":{"status":"undefined"}},{"keyword":"E ","name":"eu clicar no botão atualizar requisitos","line":16,"match":{"location":"features/requisitos_necessarios.feature:16"},"result":{"status":"undefined"}},{"keyword":"Então ","name":"eu devo voltar para a página principal aonde aparece meus requisitos selecionados","line":17,"match":{"location":"features/requisitos_necessarios.feature:17"},"result":{"status":"undefined"}}],"after":[{"embeddings":[{"mime_type":"image/png","data":"bG9nL3NjcmVlbnNob3RzL29zY2FtcG9zcHVkZXJhbXNlcnNlbGVjaW9uYWRvcy5wbmc="}],"match":{"location":"features/support/hooks.rb:1"},"result":{"status":"passed","duration":2373100}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:10"},"result":{"status":"passed","duration":40300}}]},{"keyword":"Contexto","name":"","description":"","line":9,"type":"background","before":[{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:14"},"result":{"status":"passed","duration":15100}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:22"},"result":{"status":"passed","duration":9600}}],"steps":[{"keyword":"Dado ","name":"que eu esteja logado como administrador de email \"gp@admin.com\" e senha \"123\"","line":10,"match":{"location":"features/requisitos_necessarios.feature:10"},"result":{"status":"undefined"}},{"keyword":"E ","name":"não existem requisitos selecionados na página principal","line":11,"match":{"location":"features/requisitos_necessarios.feature:11"},"result":{"status":"undefined"}},{"keyword":"Quando ","name":"o administrador clicou no link para alterar documentos necessários para credenciamento","line":12,"match":{"location":"features/requisitos_necessarios.feature:12"},"result":{"status":"undefined"}}]},{"id":"disponibilizar-os-requisitos-necessarios-para-credenciamento-de-professores;não-houveram-mudanças-feitas","keyword":"Cenário","name":"Não houveram mudanças feitas","description":"","line":19,"type":"scenario","steps":[{"keyword":"Quando ","name":"eu não selecionar os campos","line":20,"match":{"location":"features/requisitos_necessarios.feature:20"},"result":{"status":"undefined"}},{"keyword":"E ","name":"eu clicar no botão atualizar requisitos","line":21,"match":{"location":"features/requisitos_necessarios.feature:21"},"result":{"status":"undefined"}},{"keyword":"Então ","name":"eu recebo uma mensagem dizendo que \"não houveram mudanças\"","line":22,"match":{"location":"features/requisitos_necessarios.feature:22"},"result":{"status":"undefined"}}],"after":[{"embeddings":[{"mime_type":"image/png","data":"bG9nL3NjcmVlbnNob3RzL25vaG91dmVyYW1tdWRhbmFzZmVpdGFzLnBuZw=="}],"match":{"location":"features/support/hooks.rb:1"},"result":{"status":"passed","duration":214700}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:10"},"result":{"status":"passed","duration":18600}}]}]},{"uri":"features/spike.feature","id":"testar","keyword":"Funcionalidade","name":"Testar","description":"","line":4,"comments":[{"value":"#encoding: utf-8","line":2}],"elements":[{"id":"testar;","keyword":"Cenário","name":"","description":"","line":5,"type":"scenario","before":[{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:14"},"result":{"status":"passed","duration":18600}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:22"},"result":{"status":"passed","duration":13400}}],"steps":[{"keyword":"Dado ","name":"que eu estou cadastrado e logado como \"Gabriel\", \"gabriel@admin.com\", \"gabriel123\", \"administrator\", \"200000000\"","line":6,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:8"},"result":{"status":"passed","duration":39523000}}],"after":[{"embeddings":[{"mime_type":"image/png","data":"bG9nL3NjcmVlbnNob3RzLy5wbmc="}],"match":{"location":"features/support/hooks.rb:1"},"result":{"status":"passed","duration":223700}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:10"},"result":{"status":"passed","duration":19100}}]}]}] \ No newline at end of file diff --git a/spec/controllers/accreditations_controller_spec.rb b/spec/controllers/accreditations_controller_spec.rb new file mode 100644 index 00000000..74a354df --- /dev/null +++ b/spec/controllers/accreditations_controller_spec.rb @@ -0,0 +1,141 @@ +require 'rails_helper' + +# This spec was generated by rspec-rails when you ran the scaffold generator. +# It demonstrates how one might use RSpec to specify the controller code that +# was generated by Rails when you ran the scaffold generator. +# +# It assumes that the implementation code is generated by the rails scaffold +# generator. If you are using any extension libraries to generate different +# controller code, this generated spec may or may not pass. +# +# It only uses APIs available in rails and/or rspec-rails. There are a number +# of tools you can use to make these specs even more expressive, but we're +# sticking to rails and rspec-rails APIs to keep things simple and stable. +# +# Compared to earlier versions of this generator, there is very limited use of +# stubs and message expectations in this spec. Stubs are only used when there +# is no simpler way to get a handle on the object needed for the example. +# Message expectations are only used when there is no simpler way to specify +# that an instance is receiving a specific message. +# +# Also compared to earlier versions of this generator, there are no longer any +# expectations of assigns and templates rendered. These features have been +# removed from Rails core in Rails 5, but can be added back in via the +# `rails-controller-testing` gem. + +RSpec.describe AccreditationsController, type: :controller do + + # This should return the minimal set of attributes required to create a valid + # Accreditation. As you add validations to Accreditation, be sure to + # adjust the attributes here as well. + let(:valid_attributes) { + skip("Add a hash of attributes valid for your model") + } + + let(:invalid_attributes) { + skip("Add a hash of attributes invalid for your model") + } + + # This should return the minimal set of values that should be in the session + # in order to pass any filters (e.g. authentication) defined in + # AccreditationsController. Be sure to keep this updated too. + let(:valid_session) { {} } + + describe "GET #index" do + it "returns a success response" do + Accreditation.create! valid_attributes + get :index, params: {}, session: valid_session + expect(response).to be_successful + end + end + + describe "GET #show" do + it "returns a success response" do + accreditation = Accreditation.create! valid_attributes + get :show, params: {id: accreditation.to_param}, session: valid_session + expect(response).to be_successful + end + end + + describe "GET #new" do + it "returns a success response" do + get :new, params: {}, session: valid_session + expect(response).to be_successful + end + end + + describe "GET #edit" do + it "returns a success response" do + accreditation = Accreditation.create! valid_attributes + get :edit, params: {id: accreditation.to_param}, session: valid_session + expect(response).to be_successful + end + end + + describe "POST #create" do + context "with valid params" do + it "creates a new Accreditation" do + expect { + post :create, params: {accreditation: valid_attributes}, session: valid_session + }.to change(Accreditation, :count).by(1) + end + + it "redirects to the created accreditation" do + post :create, params: {accreditation: valid_attributes}, session: valid_session + expect(response).to redirect_to(Accreditation.last) + end + end + + context "with invalid params" do + it "returns a success response (i.e. to display the 'new' template)" do + post :create, params: {accreditation: invalid_attributes}, session: valid_session + expect(response).to be_successful + end + end + end + + describe "PUT #update" do + context "with valid params" do + let(:new_attributes) { + skip("Add a hash of attributes valid for your model") + } + + it "updates the requested accreditation" do + accreditation = Accreditation.create! valid_attributes + put :update, params: {id: accreditation.to_param, accreditation: new_attributes}, session: valid_session + accreditation.reload + skip("Add assertions for updated state") + end + + it "redirects to the accreditation" do + accreditation = Accreditation.create! valid_attributes + put :update, params: {id: accreditation.to_param, accreditation: valid_attributes}, session: valid_session + expect(response).to redirect_to(accreditation) + end + end + + context "with invalid params" do + it "returns a success response (i.e. to display the 'edit' template)" do + accreditation = Accreditation.create! valid_attributes + put :update, params: {id: accreditation.to_param, accreditation: invalid_attributes}, session: valid_session + expect(response).to be_successful + end + end + end + + describe "DELETE #destroy" do + it "destroys the requested accreditation" do + accreditation = Accreditation.create! valid_attributes + expect { + delete :destroy, params: {id: accreditation.to_param}, session: valid_session + }.to change(Accreditation, :count).by(-1) + end + + it "redirects to the accreditations list" do + accreditation = Accreditation.create! valid_attributes + delete :destroy, params: {id: accreditation.to_param}, session: valid_session + expect(response).to redirect_to(accreditations_url) + end + end + +end diff --git a/spec/controllers/activities_controller_spec.rb b/spec/controllers/activities_controller_spec.rb deleted file mode 100644 index 577dd807..00000000 --- a/spec/controllers/activities_controller_spec.rb +++ /dev/null @@ -1,6 +0,0 @@ -# require 'rails_helper' - -# describe ActivitiesController do -# describe 'create a new activity' do -# end -# end \ No newline at end of file diff --git a/spec/controllers/requirements_controller_spec.rb b/spec/controllers/requirements_controller_spec.rb new file mode 100644 index 00000000..996b41bd --- /dev/null +++ b/spec/controllers/requirements_controller_spec.rb @@ -0,0 +1,141 @@ +require 'rails_helper' + +# This spec was generated by rspec-rails when you ran the scaffold generator. +# It demonstrates how one might use RSpec to specify the controller code that +# was generated by Rails when you ran the scaffold generator. +# +# It assumes that the implementation code is generated by the rails scaffold +# generator. If you are using any extension libraries to generate different +# controller code, this generated spec may or may not pass. +# +# It only uses APIs available in rails and/or rspec-rails. There are a number +# of tools you can use to make these specs even more expressive, but we're +# sticking to rails and rspec-rails APIs to keep things simple and stable. +# +# Compared to earlier versions of this generator, there is very limited use of +# stubs and message expectations in this spec. Stubs are only used when there +# is no simpler way to get a handle on the object needed for the example. +# Message expectations are only used when there is no simpler way to specify +# that an instance is receiving a specific message. +# +# Also compared to earlier versions of this generator, there are no longer any +# expectations of assigns and templates rendered. These features have been +# removed from Rails core in Rails 5, but can be added back in via the +# `rails-controller-testing` gem. + +RSpec.describe RequirementsController, type: :controller do + + # This should return the minimal set of attributes required to create a valid + # Requirement. As you add validations to Requirement, be sure to + # adjust the attributes here as well. + let(:valid_attributes) { + skip("Add a hash of attributes valid for your model") + } + + let(:invalid_attributes) { + skip("Add a hash of attributes invalid for your model") + } + + # This should return the minimal set of values that should be in the session + # in order to pass any filters (e.g. authentication) defined in + # RequirementsController. Be sure to keep this updated too. + let(:valid_session) { {} } + + describe "GET #index" do + it "returns a success response" do + Requirement.create! valid_attributes + get :index, params: {}, session: valid_session + expect(response).to be_successful + end + end + + describe "GET #show" do + it "returns a success response" do + requirement = Requirement.create! valid_attributes + get :show, params: {id: requirement.to_param}, session: valid_session + expect(response).to be_successful + end + end + + describe "GET #new" do + it "returns a success response" do + get :new, params: {}, session: valid_session + expect(response).to be_successful + end + end + + describe "GET #edit" do + it "returns a success response" do + requirement = Requirement.create! valid_attributes + get :edit, params: {id: requirement.to_param}, session: valid_session + expect(response).to be_successful + end + end + + describe "POST #create" do + context "with valid params" do + it "creates a new Requirement" do + expect { + post :create, params: {requirement: valid_attributes}, session: valid_session + }.to change(Requirement, :count).by(1) + end + + it "redirects to the created requirement" do + post :create, params: {requirement: valid_attributes}, session: valid_session + expect(response).to redirect_to(Requirement.last) + end + end + + context "with invalid params" do + it "returns a success response (i.e. to display the 'new' template)" do + post :create, params: {requirement: invalid_attributes}, session: valid_session + expect(response).to be_successful + end + end + end + + describe "PUT #update" do + context "with valid params" do + let(:new_attributes) { + skip("Add a hash of attributes valid for your model") + } + + it "updates the requested requirement" do + requirement = Requirement.create! valid_attributes + put :update, params: {id: requirement.to_param, requirement: new_attributes}, session: valid_session + requirement.reload + skip("Add assertions for updated state") + end + + it "redirects to the requirement" do + requirement = Requirement.create! valid_attributes + put :update, params: {id: requirement.to_param, requirement: valid_attributes}, session: valid_session + expect(response).to redirect_to(requirement) + end + end + + context "with invalid params" do + it "returns a success response (i.e. to display the 'edit' template)" do + requirement = Requirement.create! valid_attributes + put :update, params: {id: requirement.to_param, requirement: invalid_attributes}, session: valid_session + expect(response).to be_successful + end + end + end + + describe "DELETE #destroy" do + it "destroys the requested requirement" do + requirement = Requirement.create! valid_attributes + expect { + delete :destroy, params: {id: requirement.to_param}, session: valid_session + }.to change(Requirement, :count).by(-1) + end + + it "redirects to the requirements list" do + requirement = Requirement.create! valid_attributes + delete :destroy, params: {id: requirement.to_param}, session: valid_session + expect(response).to redirect_to(requirements_url) + end + end + +end diff --git a/spec/controllers/sei_processes_controller_spec.rb b/spec/controllers/sei_processes_controller_spec.rb new file mode 100644 index 00000000..c6745941 --- /dev/null +++ b/spec/controllers/sei_processes_controller_spec.rb @@ -0,0 +1,141 @@ +require 'rails_helper' + +# This spec was generated by rspec-rails when you ran the scaffold generator. +# It demonstrates how one might use RSpec to specify the controller code that +# was generated by Rails when you ran the scaffold generator. +# +# It assumes that the implementation code is generated by the rails scaffold +# generator. If you are using any extension libraries to generate different +# controller code, this generated spec may or may not pass. +# +# It only uses APIs available in rails and/or rspec-rails. There are a number +# of tools you can use to make these specs even more expressive, but we're +# sticking to rails and rspec-rails APIs to keep things simple and stable. +# +# Compared to earlier versions of this generator, there is very limited use of +# stubs and message expectations in this spec. Stubs are only used when there +# is no simpler way to get a handle on the object needed for the example. +# Message expectations are only used when there is no simpler way to specify +# that an instance is receiving a specific message. +# +# Also compared to earlier versions of this generator, there are no longer any +# expectations of assigns and templates rendered. These features have been +# removed from Rails core in Rails 5, but can be added back in via the +# `rails-controller-testing` gem. + +RSpec.describe SeiProcessesController, type: :controller do + + # This should return the minimal set of attributes required to create a valid + # SeiProcess. As you add validations to SeiProcess, be sure to + # adjust the attributes here as well. + let(:valid_attributes) { + skip("Add a hash of attributes valid for your model") + } + + let(:invalid_attributes) { + skip("Add a hash of attributes invalid for your model") + } + + # This should return the minimal set of values that should be in the session + # in order to pass any filters (e.g. authentication) defined in + # SeiProcessesController. Be sure to keep this updated too. + let(:valid_session) { {} } + + describe "GET #index" do + it "returns a success response" do + SeiProcess.create! valid_attributes + get :index, params: {}, session: valid_session + expect(response).to be_successful + end + end + + describe "GET #show" do + it "returns a success response" do + sei_process = SeiProcess.create! valid_attributes + get :show, params: {id: sei_process.to_param}, session: valid_session + expect(response).to be_successful + end + end + + describe "GET #new" do + it "returns a success response" do + get :new, params: {}, session: valid_session + expect(response).to be_successful + end + end + + describe "GET #edit" do + it "returns a success response" do + sei_process = SeiProcess.create! valid_attributes + get :edit, params: {id: sei_process.to_param}, session: valid_session + expect(response).to be_successful + end + end + + describe "POST #create" do + context "with valid params" do + it "creates a new SeiProcess" do + expect { + post :create, params: {sei_process: valid_attributes}, session: valid_session + }.to change(SeiProcess, :count).by(1) + end + + it "redirects to the created sei_process" do + post :create, params: {sei_process: valid_attributes}, session: valid_session + expect(response).to redirect_to(SeiProcess.last) + end + end + + context "with invalid params" do + it "returns a success response (i.e. to display the 'new' template)" do + post :create, params: {sei_process: invalid_attributes}, session: valid_session + expect(response).to be_successful + end + end + end + + describe "PUT #update" do + context "with valid params" do + let(:new_attributes) { + skip("Add a hash of attributes valid for your model") + } + + it "updates the requested sei_process" do + sei_process = SeiProcess.create! valid_attributes + put :update, params: {id: sei_process.to_param, sei_process: new_attributes}, session: valid_session + sei_process.reload + skip("Add assertions for updated state") + end + + it "redirects to the sei_process" do + sei_process = SeiProcess.create! valid_attributes + put :update, params: {id: sei_process.to_param, sei_process: valid_attributes}, session: valid_session + expect(response).to redirect_to(sei_process) + end + end + + context "with invalid params" do + it "returns a success response (i.e. to display the 'edit' template)" do + sei_process = SeiProcess.create! valid_attributes + put :update, params: {id: sei_process.to_param, sei_process: invalid_attributes}, session: valid_session + expect(response).to be_successful + end + end + end + + describe "DELETE #destroy" do + it "destroys the requested sei_process" do + sei_process = SeiProcess.create! valid_attributes + expect { + delete :destroy, params: {id: sei_process.to_param}, session: valid_session + }.to change(SeiProcess, :count).by(-1) + end + + it "redirects to the sei_processes list" do + sei_process = SeiProcess.create! valid_attributes + delete :destroy, params: {id: sei_process.to_param}, session: valid_session + expect(response).to redirect_to(sei_processes_url) + end + end + +end diff --git a/spec/fixtures/activities.yml b/spec/fixtures/activities.yml deleted file mode 100644 index 8c00c3c8..00000000 --- a/spec/fixtures/activities.yml +++ /dev/null @@ -1,4 +0,0 @@ -accreditation: - id: 1 - title: 'Accreditation Request' - status: 'waiting' \ No newline at end of file diff --git a/spec/fixtures/activity_types.yml b/spec/fixtures/activity_types.yml deleted file mode 100644 index 6695aad0..00000000 --- a/spec/fixtures/activity_types.yml +++ /dev/null @@ -1,3 +0,0 @@ -accreditation: - id: 1 - title: 'Accreditation' \ No newline at end of file diff --git a/spec/fixtures/users.yml b/spec/fixtures/users.yml deleted file mode 100644 index e708224a..00000000 --- a/spec/fixtures/users.yml +++ /dev/null @@ -1,11 +0,0 @@ -admin: - id: 1 - full_name: 'Administrator' - role: 'administrator' - email: 'admin@admin.com' - -prof: - id: 2 - full_name: 'Professor' - role: 'professor' - email: 'professor@professor.com' \ No newline at end of file diff --git a/spec/helpers/accreditations_helper_spec.rb b/spec/helpers/accreditations_helper_spec.rb new file mode 100644 index 00000000..ef5ec4f9 --- /dev/null +++ b/spec/helpers/accreditations_helper_spec.rb @@ -0,0 +1,15 @@ +require 'rails_helper' + +# Specs in this file have access to a helper object that includes +# the AccreditationsHelper. For example: +# +# describe AccreditationsHelper do +# describe "string concat" do +# it "concats two strings with spaces" do +# expect(helper.concat_strings("this","that")).to eq("this that") +# end +# end +# end +RSpec.describe AccreditationsHelper, type: :helper do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/helpers/requirements_helper_spec.rb b/spec/helpers/requirements_helper_spec.rb new file mode 100644 index 00000000..56f186ef --- /dev/null +++ b/spec/helpers/requirements_helper_spec.rb @@ -0,0 +1,15 @@ +require 'rails_helper' + +# Specs in this file have access to a helper object that includes +# the RequirementsHelper. For example: +# +# describe RequirementsHelper do +# describe "string concat" do +# it "concats two strings with spaces" do +# expect(helper.concat_strings("this","that")).to eq("this that") +# end +# end +# end +RSpec.describe RequirementsHelper, type: :helper do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/helpers/sei_processes_helper_spec.rb b/spec/helpers/sei_processes_helper_spec.rb new file mode 100644 index 00000000..5bdfa905 --- /dev/null +++ b/spec/helpers/sei_processes_helper_spec.rb @@ -0,0 +1,15 @@ +require 'rails_helper' + +# Specs in this file have access to a helper object that includes +# the SeiProcessesHelper. For example: +# +# describe SeiProcessesHelper do +# describe "string concat" do +# it "concats two strings with spaces" do +# expect(helper.concat_strings("this","that")).to eq("this that") +# end +# end +# end +RSpec.describe SeiProcessesHelper, type: :helper do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/models/accreditation_spec.rb b/spec/models/accreditation_spec.rb new file mode 100644 index 00000000..64cf38c7 --- /dev/null +++ b/spec/models/accreditation_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe Accreditation, type: :model do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/models/requirement_spec.rb b/spec/models/requirement_spec.rb new file mode 100644 index 00000000..73bc0c89 --- /dev/null +++ b/spec/models/requirement_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe Requirement, type: :model do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/models/sei_process_spec.rb b/spec/models/sei_process_spec.rb new file mode 100644 index 00000000..afb8155d --- /dev/null +++ b/spec/models/sei_process_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe SeiProcess, type: :model do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/rails_helper.rb b/spec/rails_helper.rb index 00345af7..b06351ba 100644 --- a/spec/rails_helper.rb +++ b/spec/rails_helper.rb @@ -1,7 +1,9 @@ # This file is copied to spec/ when you run 'rails generate rspec:install' require 'spec_helper' ENV['RAILS_ENV'] ||= 'test' + require File.expand_path('../config/environment', __dir__) + # Prevent database truncation if the environment is production abort("The Rails environment is running in production mode!") if Rails.env.production? require 'rspec/rails' @@ -20,7 +22,7 @@ # directory. Alternatively, in the individual `*_spec.rb` files, manually # require only the support files necessary. # -# Dir[Rails.root.join('spec', 'support', '**', '*.rb')].sort.each { |f| require f } +# Dir[Rails.root.join('spec', 'support', '**', '*.rb')].each { |f| require f } # Checks for pending migrations and applies them before tests are run. # If you are not using ActiveRecord, you can remove these lines. @@ -39,9 +41,6 @@ # instead of true. config.use_transactional_fixtures = true - # You can uncomment this line to turn off ActiveRecord support entirely. - # config.use_active_record = false - # RSpec Rails can automatically mix in different behaviours to your tests # based on their file location, for example enabling you to call `get` and # `post` in specs under `spec/controllers`. @@ -49,7 +48,7 @@ # You can disable this behaviour by removing the line below, and instead # explicitly tag your specs with their type, e.g.: # - # RSpec.describe UsersController, type: :controller do + # RSpec.describe UsersController, :type => :controller do # # ... # end # diff --git a/spec/requests/accreditations_spec.rb b/spec/requests/accreditations_spec.rb new file mode 100644 index 00000000..ce707660 --- /dev/null +++ b/spec/requests/accreditations_spec.rb @@ -0,0 +1,10 @@ +require 'rails_helper' + +RSpec.describe "Accreditations", type: :request do + describe "GET /accreditations" do + it "works! (now write some real specs)" do + get accreditations_path + expect(response).to have_http_status(200) + end + end +end diff --git a/spec/requests/requirements_spec.rb b/spec/requests/requirements_spec.rb new file mode 100644 index 00000000..8385b9f4 --- /dev/null +++ b/spec/requests/requirements_spec.rb @@ -0,0 +1,10 @@ +require 'rails_helper' + +RSpec.describe "Requirements", type: :request do + describe "GET /requirements" do + it "works! (now write some real specs)" do + get requirements_path + expect(response).to have_http_status(200) + end + end +end diff --git a/spec/requests/sei_processes_spec.rb b/spec/requests/sei_processes_spec.rb new file mode 100644 index 00000000..a68a3630 --- /dev/null +++ b/spec/requests/sei_processes_spec.rb @@ -0,0 +1,10 @@ +require 'rails_helper' + +RSpec.describe "SeiProcesses", type: :request do + describe "GET /sei_processes" do + it "works! (now write some real specs)" do + get sei_processes_path + expect(response).to have_http_status(200) + end + end +end diff --git a/spec/routing/accreditations_routing_spec.rb b/spec/routing/accreditations_routing_spec.rb new file mode 100644 index 00000000..fe8a17b7 --- /dev/null +++ b/spec/routing/accreditations_routing_spec.rb @@ -0,0 +1,38 @@ +require "rails_helper" + +RSpec.describe AccreditationsController, type: :routing do + describe "routing" do + it "routes to #index" do + expect(:get => "/accreditations").to route_to("accreditations#index") + end + + it "routes to #new" do + expect(:get => "/accreditations/new").to route_to("accreditations#new") + end + + it "routes to #show" do + expect(:get => "/accreditations/1").to route_to("accreditations#show", :id => "1") + end + + it "routes to #edit" do + expect(:get => "/accreditations/1/edit").to route_to("accreditations#edit", :id => "1") + end + + + it "routes to #create" do + expect(:post => "/accreditations").to route_to("accreditations#create") + end + + it "routes to #update via PUT" do + expect(:put => "/accreditations/1").to route_to("accreditations#update", :id => "1") + end + + it "routes to #update via PATCH" do + expect(:patch => "/accreditations/1").to route_to("accreditations#update", :id => "1") + end + + it "routes to #destroy" do + expect(:delete => "/accreditations/1").to route_to("accreditations#destroy", :id => "1") + end + end +end diff --git a/spec/routing/requirements_routing_spec.rb b/spec/routing/requirements_routing_spec.rb new file mode 100644 index 00000000..8ce5d654 --- /dev/null +++ b/spec/routing/requirements_routing_spec.rb @@ -0,0 +1,38 @@ +require "rails_helper" + +RSpec.describe RequirementsController, type: :routing do + describe "routing" do + it "routes to #index" do + expect(:get => "/requirements").to route_to("requirements#index") + end + + it "routes to #new" do + expect(:get => "/requirements/new").to route_to("requirements#new") + end + + it "routes to #show" do + expect(:get => "/requirements/1").to route_to("requirements#show", :id => "1") + end + + it "routes to #edit" do + expect(:get => "/requirements/1/edit").to route_to("requirements#edit", :id => "1") + end + + + it "routes to #create" do + expect(:post => "/requirements").to route_to("requirements#create") + end + + it "routes to #update via PUT" do + expect(:put => "/requirements/1").to route_to("requirements#update", :id => "1") + end + + it "routes to #update via PATCH" do + expect(:patch => "/requirements/1").to route_to("requirements#update", :id => "1") + end + + it "routes to #destroy" do + expect(:delete => "/requirements/1").to route_to("requirements#destroy", :id => "1") + end + end +end diff --git a/spec/routing/sei_processes_routing_spec.rb b/spec/routing/sei_processes_routing_spec.rb new file mode 100644 index 00000000..d7e8e8cc --- /dev/null +++ b/spec/routing/sei_processes_routing_spec.rb @@ -0,0 +1,38 @@ +require "rails_helper" + +RSpec.describe SeiProcessesController, type: :routing do + describe "routing" do + it "routes to #index" do + expect(:get => "/sei_processes").to route_to("sei_processes#index") + end + + it "routes to #new" do + expect(:get => "/sei_processes/new").to route_to("sei_processes#new") + end + + it "routes to #show" do + expect(:get => "/sei_processes/1").to route_to("sei_processes#show", :id => "1") + end + + it "routes to #edit" do + expect(:get => "/sei_processes/1/edit").to route_to("sei_processes#edit", :id => "1") + end + + + it "routes to #create" do + expect(:post => "/sei_processes").to route_to("sei_processes#create") + end + + it "routes to #update via PUT" do + expect(:put => "/sei_processes/1").to route_to("sei_processes#update", :id => "1") + end + + it "routes to #update via PATCH" do + expect(:patch => "/sei_processes/1").to route_to("sei_processes#update", :id => "1") + end + + it "routes to #destroy" do + expect(:delete => "/sei_processes/1").to route_to("sei_processes#destroy", :id => "1") + end + end +end diff --git a/spec/views/accreditations/edit.html.erb_spec.rb b/spec/views/accreditations/edit.html.erb_spec.rb new file mode 100644 index 00000000..a8d817ec --- /dev/null +++ b/spec/views/accreditations/edit.html.erb_spec.rb @@ -0,0 +1,18 @@ +require 'rails_helper' + +RSpec.describe "accreditations/edit", type: :view do + before(:each) do + @accreditation = assign(:accreditation, Accreditation.create!( + :user => nil + )) + end + + it "renders the edit accreditation form" do + render + + assert_select "form[action=?][method=?]", accreditation_path(@accreditation), "post" do + + assert_select "input[name=?]", "accreditation[user_id]" + end + end +end diff --git a/spec/views/accreditations/index.html.erb_spec.rb b/spec/views/accreditations/index.html.erb_spec.rb new file mode 100644 index 00000000..f06c58fe --- /dev/null +++ b/spec/views/accreditations/index.html.erb_spec.rb @@ -0,0 +1,19 @@ +require 'rails_helper' + +RSpec.describe "accreditations/index", type: :view do + before(:each) do + assign(:accreditations, [ + Accreditation.create!( + :user => nil + ), + Accreditation.create!( + :user => nil + ) + ]) + end + + it "renders a list of accreditations" do + render + assert_select "tr>td", :text => nil.to_s, :count => 2 + end +end diff --git a/spec/views/accreditations/new.html.erb_spec.rb b/spec/views/accreditations/new.html.erb_spec.rb new file mode 100644 index 00000000..c6921eed --- /dev/null +++ b/spec/views/accreditations/new.html.erb_spec.rb @@ -0,0 +1,18 @@ +require 'rails_helper' + +RSpec.describe "accreditations/new", type: :view do + before(:each) do + assign(:accreditation, Accreditation.new( + :user => nil + )) + end + + it "renders new accreditation form" do + render + + assert_select "form[action=?][method=?]", accreditations_path, "post" do + + assert_select "input[name=?]", "accreditation[user_id]" + end + end +end diff --git a/spec/views/accreditations/show.html.erb_spec.rb b/spec/views/accreditations/show.html.erb_spec.rb new file mode 100644 index 00000000..7a594d96 --- /dev/null +++ b/spec/views/accreditations/show.html.erb_spec.rb @@ -0,0 +1,14 @@ +require 'rails_helper' + +RSpec.describe "accreditations/show", type: :view do + before(:each) do + @accreditation = assign(:accreditation, Accreditation.create!( + :user => nil + )) + end + + it "renders attributes in

" do + render + expect(rendered).to match(//) + end +end diff --git a/spec/views/requirements/edit.html.erb_spec.rb b/spec/views/requirements/edit.html.erb_spec.rb new file mode 100644 index 00000000..e6e58848 --- /dev/null +++ b/spec/views/requirements/edit.html.erb_spec.rb @@ -0,0 +1,21 @@ +require 'rails_helper' + +RSpec.describe "requirements/edit", type: :view do + before(:each) do + @requirement = assign(:requirement, Requirement.create!( + :title => "MyString", + :content => "MyText" + )) + end + + it "renders the edit requirement form" do + render + + assert_select "form[action=?][method=?]", requirement_path(@requirement), "post" do + + assert_select "input[name=?]", "requirement[title]" + + assert_select "textarea[name=?]", "requirement[content]" + end + end +end diff --git a/spec/views/requirements/index.html.erb_spec.rb b/spec/views/requirements/index.html.erb_spec.rb new file mode 100644 index 00000000..6f4ce689 --- /dev/null +++ b/spec/views/requirements/index.html.erb_spec.rb @@ -0,0 +1,22 @@ +require 'rails_helper' + +RSpec.describe "requirements/index", type: :view do + before(:each) do + assign(:requirements, [ + Requirement.create!( + :title => "Title", + :content => "MyText" + ), + Requirement.create!( + :title => "Title", + :content => "MyText" + ) + ]) + end + + it "renders a list of requirements" do + render + assert_select "tr>td", :text => "Title".to_s, :count => 2 + assert_select "tr>td", :text => "MyText".to_s, :count => 2 + end +end diff --git a/spec/views/requirements/new.html.erb_spec.rb b/spec/views/requirements/new.html.erb_spec.rb new file mode 100644 index 00000000..4292120f --- /dev/null +++ b/spec/views/requirements/new.html.erb_spec.rb @@ -0,0 +1,21 @@ +require 'rails_helper' + +RSpec.describe "requirements/new", type: :view do + before(:each) do + assign(:requirement, Requirement.new( + :title => "MyString", + :content => "MyText" + )) + end + + it "renders new requirement form" do + render + + assert_select "form[action=?][method=?]", requirements_path, "post" do + + assert_select "input[name=?]", "requirement[title]" + + assert_select "textarea[name=?]", "requirement[content]" + end + end +end diff --git a/spec/views/requirements/show.html.erb_spec.rb b/spec/views/requirements/show.html.erb_spec.rb new file mode 100644 index 00000000..39cd138e --- /dev/null +++ b/spec/views/requirements/show.html.erb_spec.rb @@ -0,0 +1,16 @@ +require 'rails_helper' + +RSpec.describe "requirements/show", type: :view do + before(:each) do + @requirement = assign(:requirement, Requirement.create!( + :title => "Title", + :content => "MyText" + )) + end + + it "renders attributes in

" do + render + expect(rendered).to match(/Title/) + expect(rendered).to match(/MyText/) + end +end diff --git a/spec/views/sei_processes/edit.html.erb_spec.rb b/spec/views/sei_processes/edit.html.erb_spec.rb new file mode 100644 index 00000000..42e919f8 --- /dev/null +++ b/spec/views/sei_processes/edit.html.erb_spec.rb @@ -0,0 +1,24 @@ +require 'rails_helper' + +RSpec.describe "sei_processes/edit", type: :view do + before(:each) do + @sei_process = assign(:sei_process, SeiProcess.create!( + :user => nil, + :status => 1, + :code => "MyString" + )) + end + + it "renders the edit sei_process form" do + render + + assert_select "form[action=?][method=?]", sei_process_path(@sei_process), "post" do + + assert_select "input[name=?]", "sei_process[user_id]" + + assert_select "input[name=?]", "sei_process[status]" + + assert_select "input[name=?]", "sei_process[code]" + end + end +end diff --git a/spec/views/sei_processes/index.html.erb_spec.rb b/spec/views/sei_processes/index.html.erb_spec.rb new file mode 100644 index 00000000..62e3580c --- /dev/null +++ b/spec/views/sei_processes/index.html.erb_spec.rb @@ -0,0 +1,25 @@ +require 'rails_helper' + +RSpec.describe "sei_processes/index", type: :view do + before(:each) do + assign(:sei_processes, [ + SeiProcess.create!( + :user => nil, + :status => 2, + :code => "Code" + ), + SeiProcess.create!( + :user => nil, + :status => 2, + :code => "Code" + ) + ]) + end + + it "renders a list of sei_processes" do + render + assert_select "tr>td", :text => nil.to_s, :count => 2 + assert_select "tr>td", :text => 2.to_s, :count => 2 + assert_select "tr>td", :text => "Code".to_s, :count => 2 + end +end diff --git a/spec/views/sei_processes/new.html.erb_spec.rb b/spec/views/sei_processes/new.html.erb_spec.rb new file mode 100644 index 00000000..3fa87601 --- /dev/null +++ b/spec/views/sei_processes/new.html.erb_spec.rb @@ -0,0 +1,24 @@ +require 'rails_helper' + +RSpec.describe "sei_processes/new", type: :view do + before(:each) do + assign(:sei_process, SeiProcess.new( + :user => nil, + :status => 1, + :code => "MyString" + )) + end + + it "renders new sei_process form" do + render + + assert_select "form[action=?][method=?]", sei_processes_path, "post" do + + assert_select "input[name=?]", "sei_process[user_id]" + + assert_select "input[name=?]", "sei_process[status]" + + assert_select "input[name=?]", "sei_process[code]" + end + end +end diff --git a/spec/views/sei_processes/show.html.erb_spec.rb b/spec/views/sei_processes/show.html.erb_spec.rb new file mode 100644 index 00000000..d6a94c85 --- /dev/null +++ b/spec/views/sei_processes/show.html.erb_spec.rb @@ -0,0 +1,18 @@ +require 'rails_helper' + +RSpec.describe "sei_processes/show", type: :view do + before(:each) do + @sei_process = assign(:sei_process, SeiProcess.create!( + :user => nil, + :status => 2, + :code => "Code" + )) + end + + it "renders attributes in

" do + render + expect(rendered).to match(//) + expect(rendered).to match(/2/) + expect(rendered).to match(/Code/) + end +end From 45abb26b55682bb4163f6ede0a02677d898e7f91 Mon Sep 17 00:00:00 2001 From: Gabriel Preihs Date: Sat, 14 Nov 2020 11:57:26 -0300 Subject: [PATCH 22/36] Beginning requirement space with documents --- Gemfile.lock | 8 ++++++++ app/controllers/requirements_controller.rb | 6 ++++-- app/models/requirement.rb | 1 + app/views/requirements/edit.html.erb | 10 +++++++++- app/views/requirements/new.html.erb | 10 +++++++++- app/views/requirements/show.html.erb | 8 ++++++++ config/database.yml | 8 +++++--- spec/rails_helper.rb | 9 +++++---- spec/spec_helper.rb | 4 ++++ 9 files changed, 53 insertions(+), 11 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index d8f780f6..41c3f9b3 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -119,6 +119,7 @@ GEM erubi (1.10.0) execjs (2.7.0) ffi (1.13.1) + ffi (1.13.1-x64-mingw32) globalid (0.4.2) activesupport (>= 4.2.0) i18n (1.8.5) @@ -148,12 +149,16 @@ GEM mini_portile2 (2.4.0) minitest (5.14.2) msgpack (1.3.3) + msgpack (1.3.3-x64-mingw32) multi_test (0.1.2) nio4r (2.5.4) nokogiri (1.10.10) mini_portile2 (~> 2.4.0) + nokogiri (1.10.10-x64-mingw32) + mini_portile2 (~> 2.4.0) orm_adapter (0.5.0) pg (1.2.3) + pg (1.2.3-x64-mingw32) protobuf-cucumber (3.10.8) activesupport (>= 3.2) middleware @@ -252,6 +257,8 @@ GEM turbolinks-source (5.2.0) tzinfo (1.2.8) thread_safe (~> 0.1) + tzinfo-data (1.2020.4) + tzinfo (>= 1.0.0) uglifier (4.2.0) execjs (>= 0.3.0, < 3) warden (1.2.9) @@ -273,6 +280,7 @@ GEM PLATFORMS ruby + x64-mingw32 DEPENDENCIES bootsnap (>= 1.1.0) diff --git a/app/controllers/requirements_controller.rb b/app/controllers/requirements_controller.rb index b5d814b1..980f5785 100644 --- a/app/controllers/requirements_controller.rb +++ b/app/controllers/requirements_controller.rb @@ -25,7 +25,7 @@ def edit # POST /requirements.json def create @requirement = Requirement.new(requirement_params) - + respond_to do |format| if @requirement.save format.html { redirect_to @requirement, notice: 'Requirement was successfully created.' } @@ -35,6 +35,8 @@ def create format.json { render json: @requirement.errors, status: :unprocessable_entity } end end + # requirement = Requirement.create!(requirement_params) + # redirect_to requirement end # PATCH/PUT /requirements/1 @@ -69,6 +71,6 @@ def set_requirement # Never trust parameters from the scary internet, only allow the white list through. def requirement_params - params.require(:requirement).permit(:title, :content) + params.require(:requirement).permit(:title, :content, :documents) end end diff --git a/app/models/requirement.rb b/app/models/requirement.rb index b4b4c21c..6ae6949c 100644 --- a/app/models/requirement.rb +++ b/app/models/requirement.rb @@ -1,3 +1,4 @@ class Requirement < ApplicationRecord validates :title, presence: true + has_many_attached :documents end diff --git a/app/views/requirements/edit.html.erb b/app/views/requirements/edit.html.erb index b0f4687e..60e4ecf3 100644 --- a/app/views/requirements/edit.html.erb +++ b/app/views/requirements/edit.html.erb @@ -1,6 +1,14 @@

Editing Requirement

-<%= render 'form', requirement: @requirement %> +<%= form_for @requirement, html: { multipart: true } do |f| %> + <%= f.label "Título" %> + <%= f.text_field :title %> + <%= f.label "Conteúdo" %> + <%= f.text_field :title %> + <%= f.label "documentos" %> + <%= f.file_field :documents %> + <%= f.submit "Save", class: "btn btn-primary" %> +<% end %> <%= link_to 'Show', @requirement %> | <%= link_to 'Back', requirements_path %> diff --git a/app/views/requirements/new.html.erb b/app/views/requirements/new.html.erb index 22a9c0bd..979da25d 100644 --- a/app/views/requirements/new.html.erb +++ b/app/views/requirements/new.html.erb @@ -1,5 +1,13 @@

New Requirement

-<%= render 'form', requirement: @requirement %> +<%= form_for @requirement, html: { multipart: true } do |f| %> + <%= f.label "Título" %> + <%= f.text_field :title %> + <%= f.label "Conteúdo" %> + <%= f.text_field :content %> + <%= f.label :documents %> + <%= f.file_field :documents %> + <%= f.submit "Save", class: "btn btn-primary" %> +<% end %> <%= link_to 'Back', requirements_path %> diff --git a/app/views/requirements/show.html.erb b/app/views/requirements/show.html.erb index 4c90f729..c913e26d 100644 --- a/app/views/requirements/show.html.erb +++ b/app/views/requirements/show.html.erb @@ -10,5 +10,13 @@ <%= @requirement.content %>

+

documents:

+<% if @requirement.documents.attached? %> +

existem documentos acoplados

+ <% @requirement.documents.each do | document | %> + <%= link_to document.filename, rails_blob_path(document, disposition: 'attachment') %> + <% end %> +<% end %> + <%= link_to 'Edit', edit_requirement_path(@requirement) %> | <%= link_to 'Back', requirements_path %> diff --git a/config/database.yml b/config/database.yml index bbc24623..5501a631 100644 --- a/config/database.yml +++ b/config/database.yml @@ -20,6 +20,7 @@ default: &default # For details on connection pooling, see Rails configuration guide # http://guides.rubyonrails.org/configuring.html#database-pooling pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> + password: postgres development: <<: *default @@ -29,10 +30,10 @@ development: # To create additional roles in postgres see `$ createuser --help`. # When left blank, postgres will use the default role. This is # the same name as the operating system user that initialized the database. - #username: secretaria_ppgi + # username: postgres # The password associated with the postgres role (username). - #password: + password: postgres # Connect on a TCP socket. Omitted by default since the client uses a # domain socket that doesn't need configuration. Windows does not have @@ -70,7 +71,8 @@ test: # # On Heroku and other platform providers, you may have a full connection URL # available as an environment variable. For example: -# +# username: postgres +password: postgres # DATABASE_URL="postgres://myuser:mypass@localhost/somedatabase" # # You can use this database configuration with: diff --git a/spec/rails_helper.rb b/spec/rails_helper.rb index b06351ba..00345af7 100644 --- a/spec/rails_helper.rb +++ b/spec/rails_helper.rb @@ -1,9 +1,7 @@ # This file is copied to spec/ when you run 'rails generate rspec:install' require 'spec_helper' ENV['RAILS_ENV'] ||= 'test' - require File.expand_path('../config/environment', __dir__) - # Prevent database truncation if the environment is production abort("The Rails environment is running in production mode!") if Rails.env.production? require 'rspec/rails' @@ -22,7 +20,7 @@ # directory. Alternatively, in the individual `*_spec.rb` files, manually # require only the support files necessary. # -# Dir[Rails.root.join('spec', 'support', '**', '*.rb')].each { |f| require f } +# Dir[Rails.root.join('spec', 'support', '**', '*.rb')].sort.each { |f| require f } # Checks for pending migrations and applies them before tests are run. # If you are not using ActiveRecord, you can remove these lines. @@ -41,6 +39,9 @@ # instead of true. config.use_transactional_fixtures = true + # You can uncomment this line to turn off ActiveRecord support entirely. + # config.use_active_record = false + # RSpec Rails can automatically mix in different behaviours to your tests # based on their file location, for example enabling you to call `get` and # `post` in specs under `spec/controllers`. @@ -48,7 +49,7 @@ # You can disable this behaviour by removing the line below, and instead # explicitly tag your specs with their type, e.g.: # - # RSpec.describe UsersController, :type => :controller do + # RSpec.describe UsersController, type: :controller do # # ... # end # diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index ce33d66d..75cc2ced 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -66,6 +66,10 @@ # - http://rspec.info/blog/2014/05/notable-changes-in-rspec-3/#zero-monkey-patching-mode config.disable_monkey_patching! + # This setting enables warnings. It's recommended, but in some cases may + # be too noisy due to issues in dependencies. + config.warnings = true + # Many RSpec users commonly either run the entire suite or an individual # file, and it's useful to allow more verbose output when running an # individual spec file. From f70597d37491e5c4e36fc321da9872d55b6e15fc Mon Sep 17 00:00:00 2001 From: Gabriel Preihs Date: Sat, 14 Nov 2020 15:11:15 -0300 Subject: [PATCH 23/36] Permiting multiple documents --- app/controllers/requirements_controller.rb | 13 ++++++++++++- app/views/requirements/edit.html.erb | 15 ++++++++++++++- app/views/requirements/new.html.erb | 4 ++-- app/views/requirements/show.html.erb | 13 ++++++++----- config/routes.rb | 5 +++++ 5 files changed, 41 insertions(+), 9 deletions(-) diff --git a/app/controllers/requirements_controller.rb b/app/controllers/requirements_controller.rb index 980f5785..92512ac0 100644 --- a/app/controllers/requirements_controller.rb +++ b/app/controllers/requirements_controller.rb @@ -39,6 +39,17 @@ def create # redirect_to requirement end + # def delete_document_attachment + # puts "entrou" + # @document = ActiveStorage::Blob.find_signed(params[:id]) + # puts @document + # @document.purge_later + # respond_to do |format| + # format.html { redirect_to requirements_url, notice: 'O documento foi excluido com sucesso !' } + # format.json { head :no_content } + # end + # end + # PATCH/PUT /requirements/1 # PATCH/PUT /requirements/1.json def update @@ -71,6 +82,6 @@ def set_requirement # Never trust parameters from the scary internet, only allow the white list through. def requirement_params - params.require(:requirement).permit(:title, :content, :documents) + params.require(:requirement).permit(:title, :content, documents: []) end end diff --git a/app/views/requirements/edit.html.erb b/app/views/requirements/edit.html.erb index 60e4ecf3..505893b9 100644 --- a/app/views/requirements/edit.html.erb +++ b/app/views/requirements/edit.html.erb @@ -6,9 +6,22 @@ <%= f.label "Conteúdo" %> <%= f.text_field :title %> <%= f.label "documentos" %> - <%= f.file_field :documents %> + <%= f.file_field :documents, multiple: true %> <%= f.submit "Save", class: "btn btn-primary" %> <% end %> +<% if @requirement.documents.attached? %> +
Existem documentos anexados:
+ <% @requirement.documents.each do | document | %> +
+ <%= link_to document.filename, rails_blob_path(document, disposition: 'attachment') %> + <%# <%= link_to 'Remover', delete_document_attachment_requirement_url(document.signed_id), + method: :delete, + data: { } + %> +
+ <% end %> +<% end %> +
<%= link_to 'Show', @requirement %> | <%= link_to 'Back', requirements_path %> diff --git a/app/views/requirements/new.html.erb b/app/views/requirements/new.html.erb index 979da25d..bca8b6b3 100644 --- a/app/views/requirements/new.html.erb +++ b/app/views/requirements/new.html.erb @@ -5,8 +5,8 @@ <%= f.text_field :title %> <%= f.label "Conteúdo" %> <%= f.text_field :content %> - <%= f.label :documents %> - <%= f.file_field :documents %> + <%= f.label "documentos" %> + <%= f.file_field :documents, multiple: true %> <%= f.submit "Save", class: "btn btn-primary" %> <% end %> diff --git a/app/views/requirements/show.html.erb b/app/views/requirements/show.html.erb index c913e26d..499982a0 100644 --- a/app/views/requirements/show.html.erb +++ b/app/views/requirements/show.html.erb @@ -10,12 +10,15 @@ <%= @requirement.content %>

-

documents:

<% if @requirement.documents.attached? %> -

existem documentos acoplados

- <% @requirement.documents.each do | document | %> - <%= link_to document.filename, rails_blob_path(document, disposition: 'attachment') %> - <% end %> +

+ existem documentos acoplados + <% @requirement.documents.each do | document | %> +

+ <%= link_to document.filename, rails_blob_path(document, disposition: 'attachment') %> +
+ <% end %> +

<% end %> <%= link_to 'Edit', edit_requirement_path(@requirement) %> | diff --git a/config/routes.rb b/config/routes.rb index ce4d105f..c398526f 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -4,6 +4,11 @@ resources :accreditations resources :sei_processes resources :requirements + # resources :requirements do + # member do + # delete :delete_document_attachment + # end + # end get 'home/index' devise_for :users # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html From 97d36256474a29098c7b4b6966fa469c972fe0e4 Mon Sep 17 00:00:00 2001 From: Gabriel Preihs Date: Sat, 14 Nov 2020 16:21:39 -0300 Subject: [PATCH 24/36] Deleting specific attachments --- app/controllers/requirements_controller.rb | 18 ++++++------------ app/views/requirements/edit.html.erb | 6 ++++-- config/routes.rb | 10 +++++----- 3 files changed, 15 insertions(+), 19 deletions(-) diff --git a/app/controllers/requirements_controller.rb b/app/controllers/requirements_controller.rb index 92512ac0..ddfd0e6d 100644 --- a/app/controllers/requirements_controller.rb +++ b/app/controllers/requirements_controller.rb @@ -35,20 +35,14 @@ def create format.json { render json: @requirement.errors, status: :unprocessable_entity } end end - # requirement = Requirement.create!(requirement_params) - # redirect_to requirement end - # def delete_document_attachment - # puts "entrou" - # @document = ActiveStorage::Blob.find_signed(params[:id]) - # puts @document - # @document.purge_later - # respond_to do |format| - # format.html { redirect_to requirements_url, notice: 'O documento foi excluido com sucesso !' } - # format.json { head :no_content } - # end - # end + def delete_document_attachment + @document = ActiveStorage::Attachment.find_by(id: params[:id]) + @document&.purge + # @asset = ActiveStorage::Attachment.find_by(id: params[:id]) + redirect_to :edit + end # PATCH/PUT /requirements/1 # PATCH/PUT /requirements/1.json diff --git a/app/views/requirements/edit.html.erb b/app/views/requirements/edit.html.erb index 505893b9..a8706164 100644 --- a/app/views/requirements/edit.html.erb +++ b/app/views/requirements/edit.html.erb @@ -10,18 +10,20 @@ <%= f.submit "Save", class: "btn btn-primary" %> <% end %> +
<% if @requirement.documents.attached? %>
Existem documentos anexados:
<% @requirement.documents.each do | document | %>
<%= link_to document.filename, rails_blob_path(document, disposition: 'attachment') %> - <%# <%= link_to 'Remover', delete_document_attachment_requirement_url(document.signed_id), + <%= link_to 'Remover', delete_document_attachment_requirement_url(document.id, @requirement), method: :delete, data: { } - %> + %>
<% end %> <% end %> +
<%= link_to 'Show', @requirement %> | <%= link_to 'Back', requirements_path %> diff --git a/config/routes.rb b/config/routes.rb index c398526f..a570c3a9 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -4,11 +4,11 @@ resources :accreditations resources :sei_processes resources :requirements - # resources :requirements do - # member do - # delete :delete_document_attachment - # end - # end + resources :requirements do + member do + delete :delete_document_attachment + end + end get 'home/index' devise_for :users # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html From 6017eb6dfedfcfb17ff736ab7761f10959da064a Mon Sep 17 00:00:00 2001 From: ngsylar Date: Sat, 14 Nov 2020 18:09:52 -0300 Subject: [PATCH 25/36] Accreditation and SEI Processes --- app/controllers/accreditations_controller.rb | 8 +- app/controllers/sei_processes_controller.rb | 19 +- app/models/accreditation.rb | 1 + .../_accreditation.json.jbuilder | 2 +- app/views/accreditations/_form.html.erb | 5 + app/views/accreditations/edit.html.erb | 16 +- app/views/accreditations/index.html.erb | 7 +- app/views/accreditations/new.html.erb | 12 +- app/views/accreditations/show.html.erb | 5 + app/views/home/index.html.erb | 16 +- app/views/sei_processes/edit.html.erb | 33 +- app/views/sei_processes/index.html.erb | 51 +- app/views/sei_processes/new.html.erb | 13 +- app/views/sei_processes/show.html.erb | 5 +- config/database.yml | 10 +- config/routes.rb | 1 + ...> 20201114202425_create_accreditations.rb} | 1 + db/schema.rb | 5 +- features.html | 953 ++++++++---------- .../credenciamento_professores_steps.rb | 3 +- report.json | 2 +- spec/requests/accreditations_spec.rb | 131 ++- spec/routing/accreditations_routing_spec.rb | 16 +- .../accreditations/edit.html.erb_spec.rb | 18 - .../accreditations/index.html.erb_spec.rb | 19 - .../views/accreditations/new.html.erb_spec.rb | 18 - .../accreditations/show.html.erb_spec.rb | 14 - spec/views/requirements/edit.html.erb_spec.rb | 21 - .../views/requirements/index.html.erb_spec.rb | 22 - spec/views/requirements/new.html.erb_spec.rb | 21 - spec/views/requirements/show.html.erb_spec.rb | 16 - .../views/sei_processes/edit.html.erb_spec.rb | 24 - .../sei_processes/index.html.erb_spec.rb | 25 - spec/views/sei_processes/new.html.erb_spec.rb | 24 - .../views/sei_processes/show.html.erb_spec.rb | 18 - 35 files changed, 730 insertions(+), 825 deletions(-) rename db/migrate/{20201113222237_create_accreditations.rb => 20201114202425_create_accreditations.rb} (82%) delete mode 100644 spec/views/accreditations/edit.html.erb_spec.rb delete mode 100644 spec/views/accreditations/index.html.erb_spec.rb delete mode 100644 spec/views/accreditations/new.html.erb_spec.rb delete mode 100644 spec/views/accreditations/show.html.erb_spec.rb delete mode 100644 spec/views/requirements/edit.html.erb_spec.rb delete mode 100644 spec/views/requirements/index.html.erb_spec.rb delete mode 100644 spec/views/requirements/new.html.erb_spec.rb delete mode 100644 spec/views/requirements/show.html.erb_spec.rb delete mode 100644 spec/views/sei_processes/edit.html.erb_spec.rb delete mode 100644 spec/views/sei_processes/index.html.erb_spec.rb delete mode 100644 spec/views/sei_processes/new.html.erb_spec.rb delete mode 100644 spec/views/sei_processes/show.html.erb_spec.rb diff --git a/app/controllers/accreditations_controller.rb b/app/controllers/accreditations_controller.rb index db8f25a1..52d333e7 100644 --- a/app/controllers/accreditations_controller.rb +++ b/app/controllers/accreditations_controller.rb @@ -14,7 +14,7 @@ def show # GET /accreditations/new def new - @accreditation = Accreditation.new + @accreditation = Accreditation.new(sei_proccess_id: 0) end # GET /accreditations/1/edit @@ -28,7 +28,7 @@ def create respond_to do |format| if @accreditation.save - format.html { redirect_to @accreditation, notice: 'Accreditation was successfully created.' } + format.html { redirect_to accreditations_url, notice: 'Accreditation was successfully created.' } format.json { render :show, status: :created, location: @accreditation } else format.html { render :new } @@ -42,7 +42,7 @@ def create def update respond_to do |format| if @accreditation.update(accreditation_params) - format.html { redirect_to @accreditation, notice: 'Accreditation was successfully updated.' } + format.html { redirect_to accreditations_url, notice: 'Accreditation was successfully updated.' } format.json { render :show, status: :ok, location: @accreditation } else format.html { render :edit } @@ -69,6 +69,6 @@ def set_accreditation # Never trust parameters from the scary internet, only allow the white list through. def accreditation_params - params.require(:accreditation).permit(:user_id, :start_date, :end_date) + params.require(:accreditation).permit(:user_id, :start_date, :end_date, :sei_proccess_id) end end diff --git a/app/controllers/sei_processes_controller.rb b/app/controllers/sei_processes_controller.rb index 1ef9a796..c9fd913c 100644 --- a/app/controllers/sei_processes_controller.rb +++ b/app/controllers/sei_processes_controller.rb @@ -14,7 +14,7 @@ def show # GET /sei_processes/new def new - @sei_process = SeiProcess.new + @sei_process = SeiProcess.new(user_id: current_user.id, status: 'Espera', code: '0') end # GET /sei_processes/1/edit @@ -28,8 +28,8 @@ def create respond_to do |format| if @sei_process.save - format.html { redirect_to @sei_process, notice: 'Sei process was successfully created.' } - format.json { render :show, status: :created, location: @sei_process } + format.html { redirect_to sei_processes_url, notice: 'Processo aberto com sucesso!' } + format.json { render :index, status: :created, location: @sei_process } else format.html { render :new } format.json { render json: @sei_process.errors, status: :unprocessable_entity } @@ -42,8 +42,13 @@ def create def update respond_to do |format| if @sei_process.update(sei_process_params) - format.html { redirect_to @sei_process, notice: 'Sei process was successfully updated.' } - format.json { render :show, status: :ok, location: @sei_process } + format.html { redirect_to sei_processes_url, notice: 'Processo atualizado com sucesso!' } + format.json { render :index, status: :ok, location: @sei_process } + + if (@sei_process.status == 'Aprovado') && @sei_process.documents.attached? + Accreditation.create!(user_id: @sei_process.user_id, sei_process_id: @sei_process.id) + end + else format.html { render :edit } format.json { render json: @sei_process.errors, status: :unprocessable_entity } @@ -56,7 +61,7 @@ def update def destroy @sei_process.destroy respond_to do |format| - format.html { redirect_to sei_processes_url, notice: 'Sei process was successfully destroyed.' } + format.html { redirect_to sei_processes_url, notice: 'Processo excluído com sucesso!' } format.json { head :no_content } end end @@ -69,6 +74,6 @@ def set_sei_process # Never trust parameters from the scary internet, only allow the white list through. def sei_process_params - params.require(:sei_process).permit(:user_id, :status, :code) + params.require(:sei_process).permit(:user_id, :status, :code, documents: []) end end diff --git a/app/models/accreditation.rb b/app/models/accreditation.rb index 559b2c5a..e0d49a5b 100644 --- a/app/models/accreditation.rb +++ b/app/models/accreditation.rb @@ -1,3 +1,4 @@ class Accreditation < ApplicationRecord belongs_to :user + belongs_to :sei_process end diff --git a/app/views/accreditations/_accreditation.json.jbuilder b/app/views/accreditations/_accreditation.json.jbuilder index bd6bafce..3e22c1cd 100644 --- a/app/views/accreditations/_accreditation.json.jbuilder +++ b/app/views/accreditations/_accreditation.json.jbuilder @@ -1,2 +1,2 @@ -json.extract! accreditation, :id, :user_id, :start_date, :end_date, :created_at, :updated_at +json.extract! accreditation, :id, :user_id, :start_date, :end_date, :sei_process_id, :created_at, :updated_at json.url accreditation_url(accreditation, format: :json) diff --git a/app/views/accreditations/_form.html.erb b/app/views/accreditations/_form.html.erb index ae8fd1b1..15eb94da 100644 --- a/app/views/accreditations/_form.html.erb +++ b/app/views/accreditations/_form.html.erb @@ -26,6 +26,11 @@ <%= form.date_select :end_date %>
+
+ <%= form.label :sei_process_id %> + <%= form.text_field :sei_process_id %> +
+
<%= form.submit %>
diff --git a/app/views/accreditations/edit.html.erb b/app/views/accreditations/edit.html.erb index c4124125..2e359887 100644 --- a/app/views/accreditations/edit.html.erb +++ b/app/views/accreditations/edit.html.erb @@ -1,6 +1,20 @@

Editing Accreditation

-<%= render 'form', accreditation: @accreditation %> +<%= form_for @accreditation, html: { multipart: true } do |f| %> + User: + <%= f.number_field :user_id %> + Start date: + <%= f.date_field :start_date %> + End date: + <%= f.date_field :end_date %> +
+ <%= f.submit "Save", class: "btn btn-primary" %> +<% end %> + <%= link_to 'Show', @accreditation %> | <%= link_to 'Back', accreditations_path %> + + + + diff --git a/app/views/accreditations/index.html.erb b/app/views/accreditations/index.html.erb index 67d1741b..4ae74a9b 100644 --- a/app/views/accreditations/index.html.erb +++ b/app/views/accreditations/index.html.erb @@ -1,4 +1,4 @@ -

<%= notice %>

+

Accreditations

@@ -15,7 +15,8 @@ <% @accreditations.each do |accreditation| %> - <%= accreditation.user %> + <%= accreditation.user.full_name %> + <%= accreditation.sei_process_id %> <%= accreditation.start_date %> <%= accreditation.end_date %> <%= link_to 'Show', accreditation %> @@ -28,4 +29,4 @@
-<%= link_to 'New Accreditation', new_accreditation_path %> +<%= link_to 'New Accreditation', new_accreditation_path %> \ No newline at end of file diff --git a/app/views/accreditations/new.html.erb b/app/views/accreditations/new.html.erb index 5022b9bd..53a1b29d 100644 --- a/app/views/accreditations/new.html.erb +++ b/app/views/accreditations/new.html.erb @@ -1,5 +1,11 @@

New Accreditation

+<%= form_for @accreditation, html: { multipart: true } do |f| %> + <%= f.hidden_field :user_id %> + <%= f.hidden_field :start_date %> + <%= f.hidden_field :end_date %> +
+ <%= f.submit "Save", class: "btn btn-primary" %> +<% end %> -<%= render 'form', accreditation: @accreditation %> - -<%= link_to 'Back', accreditations_path %> +
+<%= link_to 'Back', accreditations_path %> \ No newline at end of file diff --git a/app/views/accreditations/show.html.erb b/app/views/accreditations/show.html.erb index 36b9544a..a4f86280 100644 --- a/app/views/accreditations/show.html.erb +++ b/app/views/accreditations/show.html.erb @@ -15,5 +15,10 @@ <%= @accreditation.end_date %>

+

+ Sei process: + <%= @accreditation.sei_process %> +

+ <%= link_to 'Edit', edit_accreditation_path(@accreditation) %> | <%= link_to 'Back', accreditations_path %> diff --git a/app/views/home/index.html.erb b/app/views/home/index.html.erb index 33ba387d..14a0c3e8 100644 --- a/app/views/home/index.html.erb +++ b/app/views/home/index.html.erb @@ -1,4 +1,4 @@ -

Home#index

+

Início

Find me in app/views/home/index.html.erb

<% if user_signed_in? %> @@ -6,7 +6,19 @@

Nome: <%= current_user.full_name %>

Email: <%= current_user.email %>

Cargo: <%= current_user.role %>

- <%= link_to "Sair", destroy_user_session_path, method: :delete %> + + <% if current_user.role == "administrator" %> + + <%= link_to "Atualizar Requisitos", requirements_path %> + <%= link_to "Processos Abertos", sei_processes_path %> + <%= link_to "Lista de Credenciamentos", accreditations_path %> +
+ <%= link_to "Sair", destroy_user_session_path, method: :delete %> + + <% else %> + <%= link_to "Sair", destroy_user_session_path, method: :delete %> + <% end %> + <% else %>

Entre para acessar o sistema!

Você também pode se registrar ou pegar uma conta no arquivo db/seeds.rb

diff --git a/app/views/sei_processes/edit.html.erb b/app/views/sei_processes/edit.html.erb index c486a333..53c15b17 100644 --- a/app/views/sei_processes/edit.html.erb +++ b/app/views/sei_processes/edit.html.erb @@ -1,6 +1,31 @@ -

Editing Sei Process

+

<%= "Processo #{@sei_process.id}" %>

-<%= render 'form', sei_process: @sei_process %> +

+ Nome: + <%= @sei_process.user.full_name %> +

+

+ Matrícula: + <%= @sei_process.user.registration %> +

-<%= link_to 'Show', @sei_process %> | -<%= link_to 'Back', sei_processes_path %> +<% if @sei_process.documents.attached? %> +

+ Documentos Anexados + <% @sei_process.documents.each do | document | %> +

+ <%= link_to document.filename, rails_blob_path(document, disposition: 'attachment') %> +
+ <% end %> +

+<% end %> + +<%= form_for @sei_process, html: { multipart: true } do |f| %> + <%= f.label "Avaliar" %> + <%= f.radio_button :status, 'Aprovado', :checked => true %> Aprovado + <%= f.radio_button :status, 'Rejeitado' %> Rejeitado + <%= f.submit "Save", class: "btn btn-primary" %> +<% end %> + +
+<%= link_to 'Voltar', sei_processes_path %> diff --git a/app/views/sei_processes/index.html.erb b/app/views/sei_processes/index.html.erb index af8b06eb..a6b72490 100644 --- a/app/views/sei_processes/index.html.erb +++ b/app/views/sei_processes/index.html.erb @@ -1,31 +1,34 @@ -

<%= notice %>

+

-

Sei Processes

+

SEI Processos

- - - - - - - - - - - - <% @sei_processes.each do |sei_process| %> +<% if user_signed_in? && (current_user.role == "administrator") %> +
UserStatusCode
+ - - - - - - + + + + + - <% end %> - -
<%= sei_process.user %><%= sei_process.status %><%= sei_process.code %><%= link_to 'Show', sei_process %><%= link_to 'Edit', edit_sei_process_path(sei_process) %><%= link_to 'Destroy', sei_process, method: :delete, data: { confirm: 'Are you sure?' } %>NomeMatrículaCódigo do ProcessoStatus
+ + + + <% @sei_processes.each do |sei_process| %> + + <%= sei_process.user.full_name %> + <%= sei_process.user.registration %> + <%= sei_process.id %> + <%= sei_process.status %> + <%= link_to 'Gerenciar', edit_sei_process_path(sei_process) %> + <%= link_to 'Excluir', sei_process, method: :delete, data: { confirm: 'Are you sure?' } %> + + <% end %> + + +<% end %>
-<%= link_to 'New Sei Process', new_sei_process_path %> +<%= link_to 'Abrir Processo', new_sei_process_path %> diff --git a/app/views/sei_processes/new.html.erb b/app/views/sei_processes/new.html.erb index ab5b00bf..d4331717 100644 --- a/app/views/sei_processes/new.html.erb +++ b/app/views/sei_processes/new.html.erb @@ -1,5 +1,14 @@ -

New Sei Process

+

Abrir Processo

-<%= render 'form', sei_process: @sei_process %> +<%= form_for @sei_process, html: { multipart: true } do |f| %> + <%= f.hidden_field :user_id %> + <%= f.hidden_field :status %> + <%= f.hidden_field :code %> + <%= f.label "Anexar Documentos" %> + <%= f.file_field :documents, multiple: true %> +
+ <%= f.submit "Save", class: "btn btn-primary" %> +<% end %> +
<%= link_to 'Back', sei_processes_path %> diff --git a/app/views/sei_processes/show.html.erb b/app/views/sei_processes/show.html.erb index e074d3f0..a8e9e4fc 100644 --- a/app/views/sei_processes/show.html.erb +++ b/app/views/sei_processes/show.html.erb @@ -1,4 +1,4 @@ -

<%= notice %>

+

<%= notice %>

User: @@ -12,8 +12,7 @@

Code: - <%= @sei_process.code %> + <%= @sei_process.id %>

-<%= link_to 'Edit', edit_sei_process_path(@sei_process) %> | <%= link_to 'Back', sei_processes_path %> diff --git a/config/database.yml b/config/database.yml index 5501a631..9930ddf5 100644 --- a/config/database.yml +++ b/config/database.yml @@ -20,7 +20,6 @@ default: &default # For details on connection pooling, see Rails configuration guide # http://guides.rubyonrails.org/configuring.html#database-pooling pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> - password: postgres development: <<: *default @@ -30,10 +29,10 @@ development: # To create additional roles in postgres see `$ createuser --help`. # When left blank, postgres will use the default role. This is # the same name as the operating system user that initialized the database. - # username: postgres + #username: secretaria_ppgi # The password associated with the postgres role (username). - password: postgres + #password: # Connect on a TCP socket. Omitted by default since the client uses a # domain socket that doesn't need configuration. Windows does not have @@ -71,8 +70,7 @@ test: # # On Heroku and other platform providers, you may have a full connection URL # available as an environment variable. For example: -# username: postgres -password: postgres +# # DATABASE_URL="postgres://myuser:mypass@localhost/somedatabase" # # You can use this database configuration with: @@ -84,4 +82,4 @@ production: <<: *default database: secretaria_ppgi_production username: secretaria_ppgi - password: <%= ENV['SECRETARIA_PPGI_DATABASE_PASSWORD'] %> + password: <%= ENV['SECRETARIA_PPGI_DATABASE_PASSWORD'] %> \ No newline at end of file diff --git a/config/routes.rb b/config/routes.rb index a570c3a9..805204cf 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,6 +1,7 @@ # frozen_string_literal: true Rails.application.routes.draw do + resources :accreditations resources :accreditations resources :sei_processes resources :requirements diff --git a/db/migrate/20201113222237_create_accreditations.rb b/db/migrate/20201114202425_create_accreditations.rb similarity index 82% rename from db/migrate/20201113222237_create_accreditations.rb rename to db/migrate/20201114202425_create_accreditations.rb index 8f7f7e22..7de196f9 100644 --- a/db/migrate/20201113222237_create_accreditations.rb +++ b/db/migrate/20201114202425_create_accreditations.rb @@ -4,6 +4,7 @@ def change t.belongs_to :user, foreign_key: true t.date :start_date t.date :end_date + t.references :sei_process, foreign_key: true t.timestamps end diff --git a/db/schema.rb b/db/schema.rb index ccead4b8..f4d4f7ca 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 2020_11_13_222556) do +ActiveRecord::Schema.define(version: 2020_11_14_202425) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -19,8 +19,10 @@ t.bigint "user_id" t.date "start_date" t.date "end_date" + t.bigint "sei_process_id" t.datetime "created_at", null: false t.datetime "updated_at", null: false + t.index ["sei_process_id"], name: "index_accreditations_on_sei_process_id" t.index ["user_id"], name: "index_accreditations_on_user_id" end @@ -76,6 +78,7 @@ t.index ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true end + add_foreign_key "accreditations", "sei_processes" add_foreign_key "accreditations", "users" add_foreign_key "active_storage_attachments", "active_storage_blobs", column: "blob_id" add_foreign_key "sei_processes", "users" diff --git a/features.html b/features.html index 0c37612d..061ff6af 100644 --- a/features.html +++ b/features.html @@ -1,559 +1,498 @@ -Cucumber +

Cucumber Features

Expand All

Collapse All

# language: pt
#encoding: utf-8

Funcionalidade: Abrir solicitação de credenciamento

Como professor autenticado no sistema,
Quero poder abrir uma solicitação de credenciamento
Para que eu possa ser um professor credenciado

Contexto

  1. Dado que eu estou cadastrado e logado como "Lucas", "lucas@professor.com", "lucas123", "professor", "200000000"
    features/step_definitions/credenciamento_professores_steps.rb:8
  2. E que eu estou na página de abrir solicitação de credenciamento
    features/step_definitions/credenciamento_professores_steps.rb:30
    Can't find mapping from "de abrir solicitação de credenciamento" to a path.
    -Now, go and add a mapping in /mnt/c/Users/Fontenelle/Desktop/UnB/9 semestre/Engenharia de Software/secretaria_ppgi/features/support/paths.rb
    ./features/support/paths.rb:31:in `rescue in path_to'
    -./features/support/paths.rb:26:in `path_to'
    -./features/step_definitions/credenciamento_professores_steps.rb:31:in `/^que eu estou na página (.+)$/'
    -features/abrir_solicitacao_credenciamento.feature:11:in `E que eu estou na página de abrir solicitação de credenciamento'
    29        self.send(path_components.push('path').join('_').to_sym)
    -30      rescue NoMethodError, ArgumentError
    -31        raise "Can't find mapping from \"#{page_name}\" to a path.\n" +
    -32          "Now, go and add a mapping in #{__FILE__}"
    -33      end
    -34# gem install syntax to get syntax highlighting
features/abrir_solicitacao_credenciamento.feature:13

Cenário: Solicitação enviada com sucesso

  1. Quando eu anexo o arquivo "Formulário de Credenciamento.pdf" no campo 'Formulario'
    features/abrir_solicitacao_credenciamento.feature:14
    Quando("eu anexo o arquivo {string} no campo {string}") do |string, string2|
    -  pending # Write code here that turns the phrase above into concrete actions
    -end
  2. E eu anexo o arquivo "CV Lattes.pdf" em 'CV Lattes'
    features/step_definitions/credenciamento_professores_steps.rb:34
  3. E eu clico em 'Enviar'
    features/step_definitions/credenciamento_professores_steps.rb:38
  4. Então eu devo ver "Solicitação enviada com sucesso"
    features/step_definitions/credenciamento_professores_steps.rb:67
  5. Print maroto :)
      -
    undefined method `manage' for #<Capybara::RackTest::Browser:0x00007fffcd7263a0> (NoMethodError)
    ./features/support/hooks.rb:22:in `add_browser_logs'
    -./features/support/hooks.rb:5:in `After'
    20    current_url = Capybara.current_url.to_s
    -21    # Gather browser logs
    -22    logs = page.driver.browser.manage.logs.get(:browser).map {|line| [line.level, line.message]}
    
    -23   # Remove warnings and info messages
    -24    logs.reject! { |line| ['WARNING', 'INFO'].include?(line.first) }
    -25# gem install syntax to get syntax highlighting
features/abrir_solicitacao_credenciamento.feature:19

Cenário: Solicitação não enviada (campo obrigatório em branco)

  1. Quando eu anexo o arquivo "Formulário de Credenciamento.pdf" no campo 'Formulario'
    features/abrir_solicitacao_credenciamento.feature:20
    Quando("eu anexo o arquivo {string} no campo {string}") do |string, string2|
    -  pending # Write code here that turns the phrase above into concrete actions
    -end
  2. E eu clico em 'Enviar'
    features/step_definitions/credenciamento_professores_steps.rb:38
  3. Então eu devo ver "Solicitação não enviada (campo obrigatório* em branco)"
    features/step_definitions/credenciamento_professores_steps.rb:67
  4. Print maroto :)
      -
    undefined method `manage' for #<Capybara::RackTest::Browser:0x00007fffce93fbb8> (NoMethodError)
    ./features/support/hooks.rb:22:in `add_browser_logs'
    -./features/support/hooks.rb:5:in `After'
    20    current_url = Capybara.current_url.to_s
    -21    # Gather browser logs
    -22    logs = page.driver.browser.manage.logs.get(:browser).map {|line| [line.level, line.message]}
    
    -23   # Remove warnings and info messages
    -24    logs.reject! { |line| ['WARNING', 'INFO'].include?(line.first) }
    -25# gem install syntax to get syntax highlighting
# language: pt
#encoding: utf-8

Funcionalidade: Definir o prazo de credenciamento dos professores

Como um administrador,
para que eu possa credenciar os professores,
eu gostaria de definir o prazo de credenciamento dos professores

Contexto

  1. Dado que eu esteja autenticado como usuario "admin"
    features/credenciamento_periodo.feature:10
    Dado("que eu esteja autenticado como usuario {string}") do |string|
    -  pending # Write code here that turns the phrase above into concrete actions
    -end
  2. E que esteja na página de credenciamento
    features/credenciamento_periodo.feature:11
    Dado("que esteja na página de credenciamento") do
    -  pending # Write code here that turns the phrase above into concrete actions
    -end
features/credenciamento_periodo.feature:13

Cenário: Definir prazo de credenciamento sem data

  1. Quando eu aperto o botão "Definir prazo de credenciamento"
    features/credenciamento_periodo.feature:14
    Quando("eu aperto o botão {string}") do |string|
    -  pending # Write code here that turns the phrase above into concrete actions
    -end
  2. E eu aperto o botão "Salvar período"
    features/credenciamento_periodo.feature:15
    Quando("eu aperto o botão {string}") do |string|
    -  pending # Write code here that turns the phrase above into concrete actions
    -end
  3. Então eu espero ver a mensagem "Insira uma data de início e uma data de término válidas."
    features/credenciamento_periodo.feature:16
    Então("eu espero ver a mensagem {string}") do |string|
    -  pending # Write code here that turns the phrase above into concrete actions
    -end
  4. Print maroto :)
      -
features/credenciamento_periodo.feature:18

Cenário: Definir prazo de credenciamento com data

  1. Quando eu aperto o botão "Definir prazo de credenciamento"
    features/credenciamento_periodo.feature:19
    Quando("eu aperto o botão {string}") do |string|
    -  pending # Write code here that turns the phrase above into concrete actions
    -end
  2. Quando eu adiciono um valor "Início" para "Data de Início"
    features/credenciamento_periodo.feature:20
    Quando("eu adiciono um valor {string} para {string}") do |string, string2|
    -  pending # Write code here that turns the phrase above into concrete actions
    -end
  3. E eu adiciono um valor "Término" para "Data de Término"
    features/credenciamento_periodo.feature:21
    Quando("eu adiciono um valor {string} para {string}") do |string, string2|
    -  pending # Write code here that turns the phrase above into concrete actions
    -end
  4. E eu aperto o botão "Salvar período"
    features/credenciamento_periodo.feature:22
    Quando("eu aperto o botão {string}") do |string|
    -  pending # Write code here that turns the phrase above into concrete actions
    -end
  5. Então eu espero ver a mensagem "Prazo cadastrado com sucesso."
    features/credenciamento_periodo.feature:23
    Então("eu espero ver a mensagem {string}") do |string|
    -  pending # Write code here that turns the phrase above into concrete actions
    -end
  6. Print maroto :)
      -
# language: pt
#encoding: utf-8

Funcionalidade: Gerenciar solicitações de credenciamento

Como um admnistrador do sistema
Quero visualizar uma solicitação de credencimento em aberto
Para decidir se vou aceitar ou recusar tal solicitação

Contexto

  1. Dado que as seguintes solicitações estejam pendentes:
    features/step_definitions/credenciamento_professores_steps.rb:1
    title
    due_date
    activity_type_id
    Solicitação 1
    02-Jan-2021
    Solicitação de credenciamento
    Solicitação 2
    02-Jan-2021
    Solicitação de credenciamento
    Solicitação 3
    02-Jan-2021
    Solicitação de credenciamento
    Solicitação 4
    02-Jan-2021
    Solicitação de credenciamento
    TODO (Cucumber::Pending)
    ./features/step_definitions/credenciamento_professores_steps.rb:2:in `"que as seguintes solicitações estejam pendentes:"'
    -features/gerenciar_solicitacoes_credenciamento.feature:10:in `Dado que as seguintes solicitações estejam pendentes:'
    0Dado "que as seguintes solicitações estejam pendentes:" do |table|
    -1    pending
    -2    # table.hashes.each do |row|
    
    -3    #     Activity.create!(row)
    -4# gem install syntax to get syntax highlighting
  2. E que eu estou cadastrado e logado como "Gabriel", "gabriel@admin.com", "gabriel123", "administrator", "200000000"
    features/step_definitions/credenciamento_professores_steps.rb:8
  3. E que eu estou na página de solicitações de credenciamento
    features/step_definitions/credenciamento_professores_steps.rb:30
features/gerenciar_solicitacoes_credenciamento.feature:20

Cenário: Aceitar uma solicitação de credenciamento

  1. Quando eu clico em "Solicitação 1"
    features/gerenciar_solicitacoes_credenciamento.feature:21
    Quando("eu clico em {string}") do |string|
    -  pending # Write code here that turns the phrase above into concrete actions
    -end
  2. Então eu devo estar na página da "Solicitação 1"
    features/step_definitions/credenciamento_professores_steps.rb:42
  3. Quando eu clico em 'Aprovar'
    features/step_definitions/credenciamento_professores_steps.rb:38
  4. Então eu devo estar na página de solicitações de credenciamento
    features/step_definitions/credenciamento_professores_steps.rb:42
  5. Quando eu desmarco os seguintes estados: Rejeitadas, Reformulação
    features/gerenciar_solicitacoes_credenciamento.feature:25
    Quando("eu desmarco os seguintes estados: Rejeitadas, Reformulação") do
    -  pending # Write code here that turns the phrase above into concrete actions
    -end
  6. E eu marco os seguintes estados: Aprovadas
    features/gerenciar_solicitacoes_credenciamento.feature:26
    Quando("eu marco os seguintes estados: Aprovadas") do
    -  pending # Write code here that turns the phrase above into concrete actions
    -end
  7. E eu aperto 'Atualizar'
    features/step_definitions/credenciamento_professores_steps.rb:63
  8. Então eu devo ver "Solicitação 1"
    features/step_definitions/credenciamento_professores_steps.rb:67
  9. Print maroto :)
      -
features/gerenciar_solicitacoes_credenciamento.feature:30

Cenário: Recusar uma solicitação de credenciamento

  1. Quando eu clico em "Solicitação 2"
    features/gerenciar_solicitacoes_credenciamento.feature:31
    Quando("eu clico em {string}") do |string|
    -  pending # Write code here that turns the phrase above into concrete actions
    -end
  2. Então eu devo estar na página da "Solicitação 2"
    features/step_definitions/credenciamento_professores_steps.rb:42
  3. Quando eu clico em 'Rejeitar'
    features/step_definitions/credenciamento_professores_steps.rb:38
  4. Então eu devo estar na página de solicitações de credenciamento
    features/step_definitions/credenciamento_professores_steps.rb:42
  5. Quando eu desmarco os seguintes estados: Aprovadas, Reformulação
    features/gerenciar_solicitacoes_credenciamento.feature:35
    Quando("eu desmarco os seguintes estados: Aprovadas, Reformulação") do
    -  pending # Write code here that turns the phrase above into concrete actions
    -end
  6. E eu marco os seguintes estados: Rejeitadas
    features/gerenciar_solicitacoes_credenciamento.feature:36
    Quando("eu marco os seguintes estados: Rejeitadas") do
    -  pending # Write code here that turns the phrase above into concrete actions
    -end
  7. E eu aperto 'Atualizar'
    features/step_definitions/credenciamento_professores_steps.rb:63
  8. Então eu devo ver "Solicitação 2"
    features/step_definitions/credenciamento_professores_steps.rb:67
  9. Print maroto :)
      -
# language: pt
#encoding: utf-8

Funcionalidade: Disponibilizar os requisitos necessarios para credenciamento de professores

Como administrador autenticado no sistema,
Quero poder disponibilizar para os professores os requisitos necessários para o credenciamento
Para que eles possam dar procedimento ao credenciamento

Contexto

  1. Dado que eu esteja logado como administrador de email "gp@admin.com" e senha "123"
    features/requisitos_necessarios.feature:10
    Dado("que eu esteja logado como administrador de email {string} e senha {string}") do |string, string2|
    -  pending # Write code here that turns the phrase above into concrete actions
    -end
  2. E não existem requisitos selecionados na página principal
    features/requisitos_necessarios.feature:11
    Dado("não existem requisitos selecionados na página principal") do
    -  pending # Write code here that turns the phrase above into concrete actions
    -end
  3. Quando o administrador clicou no link para alterar documentos necessários para credenciamento
    features/requisitos_necessarios.feature:12
    Quando("o administrador clicou no link para alterar documentos necessários para credenciamento") do
    -  pending # Write code here that turns the phrase above into concrete actions
    -end
features/requisitos_necessarios.feature:14

Cenário: Os campos puderam ser selecionados

  1. Quando eu selecionar os campos
    features/requisitos_necessarios.feature:15
    Quando("eu selecionar os campos") do
    -  pending # Write code here that turns the phrase above into concrete actions
    -end
  2. E eu clicar no botão atualizar requisitos
    features/requisitos_necessarios.feature:16
    Quando("eu clicar no botão atualizar requisitos") do
    -  pending # Write code here that turns the phrase above into concrete actions
    -end
  3. Então eu devo voltar para a página principal aonde aparece meus requisitos selecionados
    features/requisitos_necessarios.feature:17
    Então("eu devo voltar para a página principal aonde aparece meus requisitos selecionados") do
    -  pending # Write code here that turns the phrase above into concrete actions
    -end
  4. Print maroto :)
      -
features/requisitos_necessarios.feature:19

Cenário: Não houveram mudanças feitas

  1. Quando eu não selecionar os campos
    features/requisitos_necessarios.feature:20
    Quando("eu não selecionar os campos") do
    -  pending # Write code here that turns the phrase above into concrete actions
    -end
  2. E eu clicar no botão atualizar requisitos
    features/requisitos_necessarios.feature:21
    Quando("eu clicar no botão atualizar requisitos") do
    -  pending # Write code here that turns the phrase above into concrete actions
    -end
  3. Então eu recebo uma mensagem dizendo que "não houveram mudanças"
    features/requisitos_necessarios.feature:22
    Então("eu recebo uma mensagem dizendo que {string}") do |string|
    -  pending # Write code here that turns the phrase above into concrete actions
    -end
  4. Print maroto :)
      -
# language: pt
#encoding: utf-8

Funcionalidade: Testar

features/spike.feature:5

Cenário:

  1. Dado que eu estou cadastrado e logado como "Gabriel", "gabriel@admin.com", "gabriel123", "administrator", "200000000"
    features/step_definitions/credenciamento_professores_steps.rb:8
  2. Print maroto :)
      -
\ No newline at end of file + + + diff --git a/features/step_definitions/credenciamento_professores_steps.rb b/features/step_definitions/credenciamento_professores_steps.rb index 2fead544..0ec1ba5a 100644 --- a/features/step_definitions/credenciamento_professores_steps.rb +++ b/features/step_definitions/credenciamento_professores_steps.rb @@ -17,7 +17,6 @@ def with_scope(locator) end Dado "que existam os seguintes credenciamentos sem prazo definido:" do |table| - type_id = ActivityType.create!(title: 'Credenciamento').id pending # table.hashes.each do |row| # end @@ -92,7 +91,7 @@ def with_scope(locator) # select_date(date, :from => field) end -ndo /^eu seleciono uma data anterior a atual em '([^']*)'$/ do |field| +Quando /^eu seleciono uma data anterior a atual em '([^']*)'$/ do |field| pending # select_date(date, :from => field) end diff --git a/report.json b/report.json index 43b1702d..bbecf57f 100644 --- a/report.json +++ b/report.json @@ -1 +1 @@ -[{"uri":"features/abrir_solicitacao_credenciamento.feature","id":"abrir-solicitação-de-credenciamento","keyword":"Funcionalidade","name":"Abrir solicitação de credenciamento","description":" Como professor autenticado no sistema,\n Quero poder abrir uma solicitação de credenciamento\n Para que eu possa ser um professor credenciado","line":4,"comments":[{"value":"#encoding: utf-8","line":2}],"elements":[{"keyword":"Contexto","name":"","description":"","line":9,"type":"background","before":[{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:14"},"result":{"status":"passed","duration":31300}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:22"},"result":{"status":"passed","duration":19200}}],"steps":[{"keyword":"Dado ","name":"que eu estou cadastrado e logado como \"Lucas\", \"lucas@professor.com\", \"lucas123\", \"professor\", \"200000000\"","line":10,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:8"},"result":{"status":"passed","duration":2212292400}},{"keyword":"E ","name":"que eu estou na página de abrir solicitação de credenciamento","line":11,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:30"},"result":{"status":"failed","error_message":"Can't find mapping from \"de abrir solicitação de credenciamento\" to a path.\nNow, go and add a mapping in /mnt/c/Users/Fontenelle/Desktop/UnB/9 semestre/Engenharia de Software/secretaria_ppgi/features/support/paths.rb (RuntimeError)\n./features/support/paths.rb:31:in `rescue in path_to'\n./features/support/paths.rb:26:in `path_to'\n./features/step_definitions/credenciamento_professores_steps.rb:31:in `/^que eu estou na página (.+)$/'\nfeatures/abrir_solicitacao_credenciamento.feature:11:in `E que eu estou na página de abrir solicitação de credenciamento'","duration":163700}}]},{"id":"abrir-solicitação-de-credenciamento;solicitação-enviada-com-sucesso","keyword":"Cenário","name":"Solicitação enviada com sucesso","description":"","line":13,"type":"scenario","steps":[{"keyword":"Quando ","name":"eu anexo o arquivo \"Formulário de Credenciamento.pdf\" no campo 'Formulario'","line":14,"match":{"location":"features/abrir_solicitacao_credenciamento.feature:14"},"result":{"status":"undefined"}},{"keyword":"E ","name":"eu anexo o arquivo \"CV Lattes.pdf\" em 'CV Lattes'","line":15,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:34"},"result":{"status":"skipped"}},{"keyword":"E ","name":"eu clico em 'Enviar'","line":16,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:38"},"result":{"status":"skipped"}},{"keyword":"Então ","name":"eu devo ver \"Solicitação enviada com sucesso\"","line":17,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:67"},"result":{"status":"skipped"}}],"after":[{"embeddings":[{"mime_type":"image/png","data":"bG9nL3NjcmVlbnNob3RzL3NvbGljaXRhb2VudmlhZGFjb21zdWNlc3NvLnBuZw=="}],"match":{"location":"features/support/hooks.rb:1"},"result":{"status":"failed","error_message":"undefined method `manage' for #\u003cCapybara::RackTest::Browser:0x00007fffcd7263a0\u003e (NoMethodError)\n./features/support/hooks.rb:22:in `add_browser_logs'\n./features/support/hooks.rb:5:in `After'","duration":367500}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:10"},"result":{"status":"passed","duration":24900}}]},{"keyword":"Contexto","name":"","description":"","line":9,"type":"background","before":[{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:14"},"result":{"status":"passed","duration":11000}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:22"},"result":{"status":"passed","duration":9200}}],"steps":[{"keyword":"Dado ","name":"que eu estou cadastrado e logado como \"Lucas\", \"lucas@professor.com\", \"lucas123\", \"professor\", \"200000000\"","line":10,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:8"},"result":{"status":"passed","duration":36932100}},{"keyword":"E ","name":"que eu estou na página de abrir solicitação de credenciamento","line":11,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:30"},"result":{"status":"failed","error_message":"Can't find mapping from \"de abrir solicitação de credenciamento\" to a path.\nNow, go and add a mapping in /mnt/c/Users/Fontenelle/Desktop/UnB/9 semestre/Engenharia de Software/secretaria_ppgi/features/support/paths.rb (RuntimeError)\n./features/support/paths.rb:31:in `rescue in path_to'\n./features/support/paths.rb:26:in `path_to'\n./features/step_definitions/credenciamento_professores_steps.rb:31:in `/^que eu estou na página (.+)$/'\nfeatures/abrir_solicitacao_credenciamento.feature:11:in `E que eu estou na página de abrir solicitação de credenciamento'","duration":125900}}]},{"id":"abrir-solicitação-de-credenciamento;solicitação-não-enviada-(campo-obrigatório-em-branco)","keyword":"Cenário","name":"Solicitação não enviada (campo obrigatório em branco)","description":"","line":19,"type":"scenario","steps":[{"keyword":"Quando ","name":"eu anexo o arquivo \"Formulário de Credenciamento.pdf\" no campo 'Formulario'","line":20,"match":{"location":"features/abrir_solicitacao_credenciamento.feature:20"},"result":{"status":"undefined"}},{"keyword":"E ","name":"eu clico em 'Enviar'","line":21,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:38"},"result":{"status":"skipped"}},{"keyword":"Então ","name":"eu devo ver \"Solicitação não enviada (campo obrigatório* em branco)\"","line":22,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:67"},"result":{"status":"skipped"}}],"after":[{"embeddings":[{"mime_type":"image/png","data":"bG9nL3NjcmVlbnNob3RzL3NvbGljaXRhb25vZW52aWFkYWNhbXBvb2JyaWdhdHJpb2VtYnJhbmNvLnBuZw=="}],"match":{"location":"features/support/hooks.rb:1"},"result":{"status":"failed","error_message":"undefined method `manage' for #\u003cCapybara::RackTest::Browser:0x00007fffce93fbb8\u003e (NoMethodError)\n./features/support/hooks.rb:22:in `add_browser_logs'\n./features/support/hooks.rb:5:in `After'","duration":1180900}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:10"},"result":{"status":"passed","duration":20800}}]}]},{"uri":"features/credenciamento_periodo.feature","id":"definir-o-prazo-de-credenciamento-dos-professores","keyword":"Funcionalidade","name":"Definir o prazo de credenciamento dos professores","description":" Como um administrador,\n para que eu possa credenciar os professores,\n eu gostaria de definir o prazo de credenciamento dos professores","line":4,"comments":[{"value":"#encoding: utf-8","line":2}],"elements":[{"keyword":"Contexto","name":"","description":"","line":9,"type":"background","before":[{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:14"},"result":{"status":"passed","duration":11000}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:22"},"result":{"status":"passed","duration":8700}}],"steps":[{"keyword":"Dado ","name":"que eu esteja autenticado como usuario \"admin\"","line":10,"match":{"location":"features/credenciamento_periodo.feature:10"},"result":{"status":"undefined"}},{"keyword":"E ","name":"que esteja na página de credenciamento","line":11,"match":{"location":"features/credenciamento_periodo.feature:11"},"result":{"status":"undefined"}}]},{"id":"definir-o-prazo-de-credenciamento-dos-professores;definir-prazo-de-credenciamento-sem-data","keyword":"Cenário","name":"Definir prazo de credenciamento sem data","description":"","line":13,"type":"scenario","steps":[{"keyword":"Quando ","name":"eu aperto o botão \"Definir prazo de credenciamento\"","line":14,"match":{"location":"features/credenciamento_periodo.feature:14"},"result":{"status":"undefined"}},{"keyword":"E ","name":"eu aperto o botão \"Salvar período\"","line":15,"match":{"location":"features/credenciamento_periodo.feature:15"},"result":{"status":"undefined"}},{"keyword":"Então ","name":"eu espero ver a mensagem \"Insira uma data de início e uma data de término válidas.\"","line":16,"match":{"location":"features/credenciamento_periodo.feature:16"},"result":{"status":"undefined"}}],"after":[{"embeddings":[{"mime_type":"image/png","data":"bG9nL3NjcmVlbnNob3RzL2RlZmluaXJwcmF6b2RlY3JlZGVuY2lhbWVudG9zZW1kYXRhLnBuZw=="}],"match":{"location":"features/support/hooks.rb:1"},"result":{"status":"passed","duration":217700}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:10"},"result":{"status":"passed","duration":34100}}]},{"keyword":"Contexto","name":"","description":"","line":9,"type":"background","before":[{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:14"},"result":{"status":"passed","duration":12100}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:22"},"result":{"status":"passed","duration":21000}}],"steps":[{"keyword":"Dado ","name":"que eu esteja autenticado como usuario \"admin\"","line":10,"match":{"location":"features/credenciamento_periodo.feature:10"},"result":{"status":"undefined"}},{"keyword":"E ","name":"que esteja na página de credenciamento","line":11,"match":{"location":"features/credenciamento_periodo.feature:11"},"result":{"status":"undefined"}}]},{"id":"definir-o-prazo-de-credenciamento-dos-professores;definir-prazo-de-credenciamento-com-data","keyword":"Cenário","name":"Definir prazo de credenciamento com data","description":"","line":18,"type":"scenario","steps":[{"keyword":"Quando ","name":"eu aperto o botão \"Definir prazo de credenciamento\"","line":19,"match":{"location":"features/credenciamento_periodo.feature:19"},"result":{"status":"undefined"}},{"keyword":"Quando ","name":"eu adiciono um valor \"Início\" para \"Data de Início\"","line":20,"match":{"location":"features/credenciamento_periodo.feature:20"},"result":{"status":"undefined"}},{"keyword":"E ","name":"eu adiciono um valor \"Término\" para \"Data de Término\"","line":21,"match":{"location":"features/credenciamento_periodo.feature:21"},"result":{"status":"undefined"}},{"keyword":"E ","name":"eu aperto o botão \"Salvar período\"","line":22,"match":{"location":"features/credenciamento_periodo.feature:22"},"result":{"status":"undefined"}},{"keyword":"Então ","name":"eu espero ver a mensagem \"Prazo cadastrado com sucesso.\"","line":23,"match":{"location":"features/credenciamento_periodo.feature:23"},"result":{"status":"undefined"}}],"after":[{"embeddings":[{"mime_type":"image/png","data":"bG9nL3NjcmVlbnNob3RzL2RlZmluaXJwcmF6b2RlY3JlZGVuY2lhbWVudG9jb21kYXRhLnBuZw=="}],"match":{"location":"features/support/hooks.rb:1"},"result":{"status":"passed","duration":219300}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:10"},"result":{"status":"passed","duration":23100}}]}]},{"uri":"features/gerenciar_solicitacoes_credenciamento.feature","id":"gerenciar-solicitações-de-credenciamento","keyword":"Funcionalidade","name":"Gerenciar solicitações de credenciamento","description":" Como um admnistrador do sistema\n Quero visualizar uma solicitação de credencimento em aberto\n Para decidir se vou aceitar ou recusar tal solicitação","line":4,"comments":[{"value":"#encoding: utf-8","line":2}],"elements":[{"keyword":"Contexto","name":"","description":"","line":9,"type":"background","before":[{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:14"},"result":{"status":"passed","duration":12900}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:22"},"result":{"status":"passed","duration":9800}}],"steps":[{"keyword":"Dado ","name":"que as seguintes solicitações estejam pendentes:","line":10,"rows":[{"cells":["title","due_date","activity_type_id"]},{"cells":["Solicitação 1","02-Jan-2021","Solicitação de credenciamento"]},{"cells":["Solicitação 2","02-Jan-2021","Solicitação de credenciamento"]},{"cells":["Solicitação 3","02-Jan-2021","Solicitação de credenciamento"]},{"cells":["Solicitação 4","02-Jan-2021","Solicitação de credenciamento"]}],"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:1"},"result":{"status":"pending","error_message":"TODO (Cucumber::Pending)\n./features/step_definitions/credenciamento_professores_steps.rb:2:in `\"que as seguintes solicitações estejam pendentes:\"'\nfeatures/gerenciar_solicitacoes_credenciamento.feature:10:in `Dado que as seguintes solicitações estejam pendentes:'","duration":496800}},{"keyword":"E ","name":"que eu estou cadastrado e logado como \"Gabriel\", \"gabriel@admin.com\", \"gabriel123\", \"administrator\", \"200000000\"","line":17,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:8"},"result":{"status":"skipped"}},{"keyword":"E ","name":"que eu estou na página de solicitações de credenciamento","line":18,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:30"},"result":{"status":"skipped"}}]},{"id":"gerenciar-solicitações-de-credenciamento;aceitar-uma-solicitação-de-credenciamento","keyword":"Cenário","name":"Aceitar uma solicitação de credenciamento","description":"","line":20,"type":"scenario","steps":[{"keyword":"Quando ","name":"eu clico em \"Solicitação 1\"","line":21,"match":{"location":"features/gerenciar_solicitacoes_credenciamento.feature:21"},"result":{"status":"undefined"}},{"keyword":"Então ","name":"eu devo estar na página da \"Solicitação 1\"","line":22,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:42"},"result":{"status":"skipped"}},{"keyword":"Quando ","name":"eu clico em 'Aprovar'","line":23,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:38"},"result":{"status":"skipped"}},{"keyword":"Então ","name":"eu devo estar na página de solicitações de credenciamento","line":24,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:42"},"result":{"status":"skipped"}},{"keyword":"Quando ","name":"eu desmarco os seguintes estados: Rejeitadas, Reformulação","line":25,"match":{"location":"features/gerenciar_solicitacoes_credenciamento.feature:25"},"result":{"status":"undefined"}},{"keyword":"E ","name":"eu marco os seguintes estados: Aprovadas","line":26,"match":{"location":"features/gerenciar_solicitacoes_credenciamento.feature:26"},"result":{"status":"undefined"}},{"keyword":"E ","name":"eu aperto 'Atualizar'","line":27,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:63"},"result":{"status":"skipped"}},{"keyword":"Então ","name":"eu devo ver \"Solicitação 1\"","line":28,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:67"},"result":{"status":"skipped"}}],"after":[{"embeddings":[{"mime_type":"image/png","data":"bG9nL3NjcmVlbnNob3RzL2FjZWl0YXJ1bWFzb2xpY2l0YW9kZWNyZWRlbmNpYW1lbnRvLnBuZw=="}],"match":{"location":"features/support/hooks.rb:1"},"result":{"status":"passed","duration":220200}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:10"},"result":{"status":"passed","duration":25200}}]},{"keyword":"Contexto","name":"","description":"","line":9,"type":"background","before":[{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:14"},"result":{"status":"passed","duration":15900}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:22"},"result":{"status":"passed","duration":12000}}],"steps":[{"keyword":"Dado ","name":"que as seguintes solicitações estejam pendentes:","line":10,"rows":[{"cells":["title","due_date","activity_type_id"]},{"cells":["Solicitação 1","02-Jan-2021","Solicitação de credenciamento"]},{"cells":["Solicitação 2","02-Jan-2021","Solicitação de credenciamento"]},{"cells":["Solicitação 3","02-Jan-2021","Solicitação de credenciamento"]},{"cells":["Solicitação 4","02-Jan-2021","Solicitação de credenciamento"]}],"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:1"},"result":{"status":"pending","error_message":"TODO (Cucumber::Pending)\n./features/step_definitions/credenciamento_professores_steps.rb:2:in `\"que as seguintes solicitações estejam pendentes:\"'\nfeatures/gerenciar_solicitacoes_credenciamento.feature:10:in `Dado que as seguintes solicitações estejam pendentes:'","duration":147300}},{"keyword":"E ","name":"que eu estou cadastrado e logado como \"Gabriel\", \"gabriel@admin.com\", \"gabriel123\", \"administrator\", \"200000000\"","line":17,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:8"},"result":{"status":"skipped"}},{"keyword":"E ","name":"que eu estou na página de solicitações de credenciamento","line":18,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:30"},"result":{"status":"skipped"}}]},{"id":"gerenciar-solicitações-de-credenciamento;recusar-uma-solicitação-de-credenciamento","keyword":"Cenário","name":"Recusar uma solicitação de credenciamento","description":"","line":30,"type":"scenario","steps":[{"keyword":"Quando ","name":"eu clico em \"Solicitação 2\"","line":31,"match":{"location":"features/gerenciar_solicitacoes_credenciamento.feature:31"},"result":{"status":"undefined"}},{"keyword":"Então ","name":"eu devo estar na página da \"Solicitação 2\"","line":32,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:42"},"result":{"status":"skipped"}},{"keyword":"Quando ","name":"eu clico em 'Rejeitar'","line":33,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:38"},"result":{"status":"skipped"}},{"keyword":"Então ","name":"eu devo estar na página de solicitações de credenciamento","line":34,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:42"},"result":{"status":"skipped"}},{"keyword":"Quando ","name":"eu desmarco os seguintes estados: Aprovadas, Reformulação","line":35,"match":{"location":"features/gerenciar_solicitacoes_credenciamento.feature:35"},"result":{"status":"undefined"}},{"keyword":"E ","name":"eu marco os seguintes estados: Rejeitadas","line":36,"match":{"location":"features/gerenciar_solicitacoes_credenciamento.feature:36"},"result":{"status":"undefined"}},{"keyword":"E ","name":"eu aperto 'Atualizar'","line":37,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:63"},"result":{"status":"skipped"}},{"keyword":"Então ","name":"eu devo ver \"Solicitação 2\"","line":38,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:67"},"result":{"status":"skipped"}}],"after":[{"embeddings":[{"mime_type":"image/png","data":"bG9nL3NjcmVlbnNob3RzL3JlY3VzYXJ1bWFzb2xpY2l0YW9kZWNyZWRlbmNpYW1lbnRvLnBuZw=="}],"match":{"location":"features/support/hooks.rb:1"},"result":{"status":"passed","duration":191900}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:10"},"result":{"status":"passed","duration":25600}}]}]},{"uri":"features/requisitos_necessarios.feature","id":"disponibilizar-os-requisitos-necessarios-para-credenciamento-de-professores","keyword":"Funcionalidade","name":"Disponibilizar os requisitos necessarios para credenciamento de professores","description":" Como administrador autenticado no sistema,\n Quero poder disponibilizar para os professores os requisitos necessários para o credenciamento\n Para que eles possam dar procedimento ao credenciamento","line":4,"comments":[{"value":"#encoding: utf-8","line":2}],"elements":[{"keyword":"Contexto","name":"","description":"","line":9,"type":"background","before":[{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:14"},"result":{"status":"passed","duration":12000}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:22"},"result":{"status":"passed","duration":12700}}],"steps":[{"keyword":"Dado ","name":"que eu esteja logado como administrador de email \"gp@admin.com\" e senha \"123\"","line":10,"match":{"location":"features/requisitos_necessarios.feature:10"},"result":{"status":"undefined"}},{"keyword":"E ","name":"não existem requisitos selecionados na página principal","line":11,"match":{"location":"features/requisitos_necessarios.feature:11"},"result":{"status":"undefined"}},{"keyword":"Quando ","name":"o administrador clicou no link para alterar documentos necessários para credenciamento","line":12,"match":{"location":"features/requisitos_necessarios.feature:12"},"result":{"status":"undefined"}}]},{"id":"disponibilizar-os-requisitos-necessarios-para-credenciamento-de-professores;os-campos-puderam-ser-selecionados","keyword":"Cenário","name":"Os campos puderam ser selecionados","description":"","line":14,"type":"scenario","steps":[{"keyword":"Quando ","name":"eu selecionar os campos","line":15,"match":{"location":"features/requisitos_necessarios.feature:15"},"result":{"status":"undefined"}},{"keyword":"E ","name":"eu clicar no botão atualizar requisitos","line":16,"match":{"location":"features/requisitos_necessarios.feature:16"},"result":{"status":"undefined"}},{"keyword":"Então ","name":"eu devo voltar para a página principal aonde aparece meus requisitos selecionados","line":17,"match":{"location":"features/requisitos_necessarios.feature:17"},"result":{"status":"undefined"}}],"after":[{"embeddings":[{"mime_type":"image/png","data":"bG9nL3NjcmVlbnNob3RzL29zY2FtcG9zcHVkZXJhbXNlcnNlbGVjaW9uYWRvcy5wbmc="}],"match":{"location":"features/support/hooks.rb:1"},"result":{"status":"passed","duration":2373100}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:10"},"result":{"status":"passed","duration":40300}}]},{"keyword":"Contexto","name":"","description":"","line":9,"type":"background","before":[{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:14"},"result":{"status":"passed","duration":15100}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:22"},"result":{"status":"passed","duration":9600}}],"steps":[{"keyword":"Dado ","name":"que eu esteja logado como administrador de email \"gp@admin.com\" e senha \"123\"","line":10,"match":{"location":"features/requisitos_necessarios.feature:10"},"result":{"status":"undefined"}},{"keyword":"E ","name":"não existem requisitos selecionados na página principal","line":11,"match":{"location":"features/requisitos_necessarios.feature:11"},"result":{"status":"undefined"}},{"keyword":"Quando ","name":"o administrador clicou no link para alterar documentos necessários para credenciamento","line":12,"match":{"location":"features/requisitos_necessarios.feature:12"},"result":{"status":"undefined"}}]},{"id":"disponibilizar-os-requisitos-necessarios-para-credenciamento-de-professores;não-houveram-mudanças-feitas","keyword":"Cenário","name":"Não houveram mudanças feitas","description":"","line":19,"type":"scenario","steps":[{"keyword":"Quando ","name":"eu não selecionar os campos","line":20,"match":{"location":"features/requisitos_necessarios.feature:20"},"result":{"status":"undefined"}},{"keyword":"E ","name":"eu clicar no botão atualizar requisitos","line":21,"match":{"location":"features/requisitos_necessarios.feature:21"},"result":{"status":"undefined"}},{"keyword":"Então ","name":"eu recebo uma mensagem dizendo que \"não houveram mudanças\"","line":22,"match":{"location":"features/requisitos_necessarios.feature:22"},"result":{"status":"undefined"}}],"after":[{"embeddings":[{"mime_type":"image/png","data":"bG9nL3NjcmVlbnNob3RzL25vaG91dmVyYW1tdWRhbmFzZmVpdGFzLnBuZw=="}],"match":{"location":"features/support/hooks.rb:1"},"result":{"status":"passed","duration":214700}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:10"},"result":{"status":"passed","duration":18600}}]}]},{"uri":"features/spike.feature","id":"testar","keyword":"Funcionalidade","name":"Testar","description":"","line":4,"comments":[{"value":"#encoding: utf-8","line":2}],"elements":[{"id":"testar;","keyword":"Cenário","name":"","description":"","line":5,"type":"scenario","before":[{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:14"},"result":{"status":"passed","duration":18600}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:22"},"result":{"status":"passed","duration":13400}}],"steps":[{"keyword":"Dado ","name":"que eu estou cadastrado e logado como \"Gabriel\", \"gabriel@admin.com\", \"gabriel123\", \"administrator\", \"200000000\"","line":6,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:8"},"result":{"status":"passed","duration":39523000}}],"after":[{"embeddings":[{"mime_type":"image/png","data":"bG9nL3NjcmVlbnNob3RzLy5wbmc="}],"match":{"location":"features/support/hooks.rb:1"},"result":{"status":"passed","duration":223700}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:10"},"result":{"status":"passed","duration":19100}}]}]}] \ No newline at end of file +[{"id":"testar","uri":"features/spike.feature","keyword":"Funcionalidade","name":"Testar","description":"","line":4,"elements":[{"id":"testar;","keyword":"Cenário","name":"","description":"","line":5,"type":"scenario","before":[{"match":{"location":"capybara-3.33.0/lib/capybara/cucumber.rb:14"},"result":{"status":"passed","duration":42500}},{"match":{"location":"capybara-3.33.0/lib/capybara/cucumber.rb:22"},"result":{"status":"passed","duration":19800}}],"steps":[{"keyword":"Dado ","name":"que eu esteja cadastrado e logado como \"Gabriel\", \"gabriel@admin.com\", \"gabriel123\", \"administrator\", \"200000000\"","line":6,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:25"},"result":{"status":"passed","duration":263059700}},{"keyword":"E ","name":"que existam os seguintes credenciamentos sem prazo definido:","line":7,"rows":[{"cells":["activity_title","user_full_name"]},{"cells":["Credenciamento 1","Adalberto"]},{"cells":["Credenciamento 2","Mariano"]},{"cells":["Credenciamento 3","Joel"]}],"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:19"},"result":{"status":"pending","error_message":"TODO (Cucumber::Pending)\n./features/step_definitions/credenciamento_professores_steps.rb:20:in `\"que existam os seguintes credenciamentos sem prazo definido:\"'\nfeatures/spike.feature:7:in `que existam os seguintes credenciamentos sem prazo definido:'","duration":165600}}],"after":[{"embeddings":[{"mime_type":"image/png","data":"bG9nL3NjcmVlbnNob3RzLy5wbmc="}],"match":{"location":"features/support/hooks.rb:1"},"result":{"status":"passed","duration":332000}},{"match":{"location":"capybara-3.33.0/lib/capybara/cucumber.rb:10"},"result":{"status":"passed","duration":21700}}]}]}] \ No newline at end of file diff --git a/spec/requests/accreditations_spec.rb b/spec/requests/accreditations_spec.rb index ce707660..d3bfc23d 100644 --- a/spec/requests/accreditations_spec.rb +++ b/spec/requests/accreditations_spec.rb @@ -1,10 +1,129 @@ -require 'rails_helper' + require 'rails_helper' -RSpec.describe "Accreditations", type: :request do - describe "GET /accreditations" do - it "works! (now write some real specs)" do - get accreditations_path - expect(response).to have_http_status(200) +# This spec was generated by rspec-rails when you ran the scaffold generator. +# It demonstrates how one might use RSpec to test the controller code that +# was generated by Rails when you ran the scaffold generator. +# +# It assumes that the implementation code is generated by the rails scaffold +# generator. If you are using any extension libraries to generate different +# controller code, this generated spec may or may not pass. +# +# It only uses APIs available in rails and/or rspec-rails. There are a number +# of tools you can use to make these specs even more expressive, but we're +# sticking to rails and rspec-rails APIs to keep things simple and stable. + +RSpec.describe "/accreditations", type: :request do + # Accreditation. As you add validations to Accreditation, be sure to + # adjust the attributes here as well. + let(:valid_attributes) { + skip("Add a hash of attributes valid for your model") + } + + let(:invalid_attributes) { + skip("Add a hash of attributes invalid for your model") + } + + describe "GET /index" do + it "renders a successful response" do + Accreditation.create! valid_attributes + get accreditations_url + expect(response).to be_successful + end + end + + describe "GET /show" do + it "renders a successful response" do + accreditation = Accreditation.create! valid_attributes + get accreditation_url(accreditation) + expect(response).to be_successful + end + end + + describe "GET /new" do + it "renders a successful response" do + get new_accreditation_url + expect(response).to be_successful + end + end + + describe "GET /edit" do + it "render a successful response" do + accreditation = Accreditation.create! valid_attributes + get edit_accreditation_url(accreditation) + expect(response).to be_successful + end + end + + describe "POST /create" do + context "with valid parameters" do + it "creates a new Accreditation" do + expect { + post accreditations_url, params: { accreditation: valid_attributes } + }.to change(Accreditation, :count).by(1) + end + + it "redirects to the created accreditation" do + post accreditations_url, params: { accreditation: valid_attributes } + expect(response).to redirect_to(accreditation_url(Accreditation.last)) + end + end + + context "with invalid parameters" do + it "does not create a new Accreditation" do + expect { + post accreditations_url, params: { accreditation: invalid_attributes } + }.to change(Accreditation, :count).by(0) + end + + it "renders a successful response (i.e. to display the 'new' template)" do + post accreditations_url, params: { accreditation: invalid_attributes } + expect(response).to be_successful + end + end + end + + describe "PATCH /update" do + context "with valid parameters" do + let(:new_attributes) { + skip("Add a hash of attributes valid for your model") + } + + it "updates the requested accreditation" do + accreditation = Accreditation.create! valid_attributes + patch accreditation_url(accreditation), params: { accreditation: new_attributes } + accreditation.reload + skip("Add assertions for updated state") + end + + it "redirects to the accreditation" do + accreditation = Accreditation.create! valid_attributes + patch accreditation_url(accreditation), params: { accreditation: new_attributes } + accreditation.reload + expect(response).to redirect_to(accreditation_url(accreditation)) + end + end + + context "with invalid parameters" do + it "renders a successful response (i.e. to display the 'edit' template)" do + accreditation = Accreditation.create! valid_attributes + patch accreditation_url(accreditation), params: { accreditation: invalid_attributes } + expect(response).to be_successful + end + end + end + + describe "DELETE /destroy" do + it "destroys the requested accreditation" do + accreditation = Accreditation.create! valid_attributes + expect { + delete accreditation_url(accreditation) + }.to change(Accreditation, :count).by(-1) + end + + it "redirects to the accreditations list" do + accreditation = Accreditation.create! valid_attributes + delete accreditation_url(accreditation) + expect(response).to redirect_to(accreditations_url) end end end diff --git a/spec/routing/accreditations_routing_spec.rb b/spec/routing/accreditations_routing_spec.rb index fe8a17b7..e77cf77a 100644 --- a/spec/routing/accreditations_routing_spec.rb +++ b/spec/routing/accreditations_routing_spec.rb @@ -3,36 +3,36 @@ RSpec.describe AccreditationsController, type: :routing do describe "routing" do it "routes to #index" do - expect(:get => "/accreditations").to route_to("accreditations#index") + expect(get: "/accreditations").to route_to("accreditations#index") end it "routes to #new" do - expect(:get => "/accreditations/new").to route_to("accreditations#new") + expect(get: "/accreditations/new").to route_to("accreditations#new") end it "routes to #show" do - expect(:get => "/accreditations/1").to route_to("accreditations#show", :id => "1") + expect(get: "/accreditations/1").to route_to("accreditations#show", id: "1") end it "routes to #edit" do - expect(:get => "/accreditations/1/edit").to route_to("accreditations#edit", :id => "1") + expect(get: "/accreditations/1/edit").to route_to("accreditations#edit", id: "1") end it "routes to #create" do - expect(:post => "/accreditations").to route_to("accreditations#create") + expect(post: "/accreditations").to route_to("accreditations#create") end it "routes to #update via PUT" do - expect(:put => "/accreditations/1").to route_to("accreditations#update", :id => "1") + expect(put: "/accreditations/1").to route_to("accreditations#update", id: "1") end it "routes to #update via PATCH" do - expect(:patch => "/accreditations/1").to route_to("accreditations#update", :id => "1") + expect(patch: "/accreditations/1").to route_to("accreditations#update", id: "1") end it "routes to #destroy" do - expect(:delete => "/accreditations/1").to route_to("accreditations#destroy", :id => "1") + expect(delete: "/accreditations/1").to route_to("accreditations#destroy", id: "1") end end end diff --git a/spec/views/accreditations/edit.html.erb_spec.rb b/spec/views/accreditations/edit.html.erb_spec.rb deleted file mode 100644 index a8d817ec..00000000 --- a/spec/views/accreditations/edit.html.erb_spec.rb +++ /dev/null @@ -1,18 +0,0 @@ -require 'rails_helper' - -RSpec.describe "accreditations/edit", type: :view do - before(:each) do - @accreditation = assign(:accreditation, Accreditation.create!( - :user => nil - )) - end - - it "renders the edit accreditation form" do - render - - assert_select "form[action=?][method=?]", accreditation_path(@accreditation), "post" do - - assert_select "input[name=?]", "accreditation[user_id]" - end - end -end diff --git a/spec/views/accreditations/index.html.erb_spec.rb b/spec/views/accreditations/index.html.erb_spec.rb deleted file mode 100644 index f06c58fe..00000000 --- a/spec/views/accreditations/index.html.erb_spec.rb +++ /dev/null @@ -1,19 +0,0 @@ -require 'rails_helper' - -RSpec.describe "accreditations/index", type: :view do - before(:each) do - assign(:accreditations, [ - Accreditation.create!( - :user => nil - ), - Accreditation.create!( - :user => nil - ) - ]) - end - - it "renders a list of accreditations" do - render - assert_select "tr>td", :text => nil.to_s, :count => 2 - end -end diff --git a/spec/views/accreditations/new.html.erb_spec.rb b/spec/views/accreditations/new.html.erb_spec.rb deleted file mode 100644 index c6921eed..00000000 --- a/spec/views/accreditations/new.html.erb_spec.rb +++ /dev/null @@ -1,18 +0,0 @@ -require 'rails_helper' - -RSpec.describe "accreditations/new", type: :view do - before(:each) do - assign(:accreditation, Accreditation.new( - :user => nil - )) - end - - it "renders new accreditation form" do - render - - assert_select "form[action=?][method=?]", accreditations_path, "post" do - - assert_select "input[name=?]", "accreditation[user_id]" - end - end -end diff --git a/spec/views/accreditations/show.html.erb_spec.rb b/spec/views/accreditations/show.html.erb_spec.rb deleted file mode 100644 index 7a594d96..00000000 --- a/spec/views/accreditations/show.html.erb_spec.rb +++ /dev/null @@ -1,14 +0,0 @@ -require 'rails_helper' - -RSpec.describe "accreditations/show", type: :view do - before(:each) do - @accreditation = assign(:accreditation, Accreditation.create!( - :user => nil - )) - end - - it "renders attributes in

" do - render - expect(rendered).to match(//) - end -end diff --git a/spec/views/requirements/edit.html.erb_spec.rb b/spec/views/requirements/edit.html.erb_spec.rb deleted file mode 100644 index e6e58848..00000000 --- a/spec/views/requirements/edit.html.erb_spec.rb +++ /dev/null @@ -1,21 +0,0 @@ -require 'rails_helper' - -RSpec.describe "requirements/edit", type: :view do - before(:each) do - @requirement = assign(:requirement, Requirement.create!( - :title => "MyString", - :content => "MyText" - )) - end - - it "renders the edit requirement form" do - render - - assert_select "form[action=?][method=?]", requirement_path(@requirement), "post" do - - assert_select "input[name=?]", "requirement[title]" - - assert_select "textarea[name=?]", "requirement[content]" - end - end -end diff --git a/spec/views/requirements/index.html.erb_spec.rb b/spec/views/requirements/index.html.erb_spec.rb deleted file mode 100644 index 6f4ce689..00000000 --- a/spec/views/requirements/index.html.erb_spec.rb +++ /dev/null @@ -1,22 +0,0 @@ -require 'rails_helper' - -RSpec.describe "requirements/index", type: :view do - before(:each) do - assign(:requirements, [ - Requirement.create!( - :title => "Title", - :content => "MyText" - ), - Requirement.create!( - :title => "Title", - :content => "MyText" - ) - ]) - end - - it "renders a list of requirements" do - render - assert_select "tr>td", :text => "Title".to_s, :count => 2 - assert_select "tr>td", :text => "MyText".to_s, :count => 2 - end -end diff --git a/spec/views/requirements/new.html.erb_spec.rb b/spec/views/requirements/new.html.erb_spec.rb deleted file mode 100644 index 4292120f..00000000 --- a/spec/views/requirements/new.html.erb_spec.rb +++ /dev/null @@ -1,21 +0,0 @@ -require 'rails_helper' - -RSpec.describe "requirements/new", type: :view do - before(:each) do - assign(:requirement, Requirement.new( - :title => "MyString", - :content => "MyText" - )) - end - - it "renders new requirement form" do - render - - assert_select "form[action=?][method=?]", requirements_path, "post" do - - assert_select "input[name=?]", "requirement[title]" - - assert_select "textarea[name=?]", "requirement[content]" - end - end -end diff --git a/spec/views/requirements/show.html.erb_spec.rb b/spec/views/requirements/show.html.erb_spec.rb deleted file mode 100644 index 39cd138e..00000000 --- a/spec/views/requirements/show.html.erb_spec.rb +++ /dev/null @@ -1,16 +0,0 @@ -require 'rails_helper' - -RSpec.describe "requirements/show", type: :view do - before(:each) do - @requirement = assign(:requirement, Requirement.create!( - :title => "Title", - :content => "MyText" - )) - end - - it "renders attributes in

" do - render - expect(rendered).to match(/Title/) - expect(rendered).to match(/MyText/) - end -end diff --git a/spec/views/sei_processes/edit.html.erb_spec.rb b/spec/views/sei_processes/edit.html.erb_spec.rb deleted file mode 100644 index 42e919f8..00000000 --- a/spec/views/sei_processes/edit.html.erb_spec.rb +++ /dev/null @@ -1,24 +0,0 @@ -require 'rails_helper' - -RSpec.describe "sei_processes/edit", type: :view do - before(:each) do - @sei_process = assign(:sei_process, SeiProcess.create!( - :user => nil, - :status => 1, - :code => "MyString" - )) - end - - it "renders the edit sei_process form" do - render - - assert_select "form[action=?][method=?]", sei_process_path(@sei_process), "post" do - - assert_select "input[name=?]", "sei_process[user_id]" - - assert_select "input[name=?]", "sei_process[status]" - - assert_select "input[name=?]", "sei_process[code]" - end - end -end diff --git a/spec/views/sei_processes/index.html.erb_spec.rb b/spec/views/sei_processes/index.html.erb_spec.rb deleted file mode 100644 index 62e3580c..00000000 --- a/spec/views/sei_processes/index.html.erb_spec.rb +++ /dev/null @@ -1,25 +0,0 @@ -require 'rails_helper' - -RSpec.describe "sei_processes/index", type: :view do - before(:each) do - assign(:sei_processes, [ - SeiProcess.create!( - :user => nil, - :status => 2, - :code => "Code" - ), - SeiProcess.create!( - :user => nil, - :status => 2, - :code => "Code" - ) - ]) - end - - it "renders a list of sei_processes" do - render - assert_select "tr>td", :text => nil.to_s, :count => 2 - assert_select "tr>td", :text => 2.to_s, :count => 2 - assert_select "tr>td", :text => "Code".to_s, :count => 2 - end -end diff --git a/spec/views/sei_processes/new.html.erb_spec.rb b/spec/views/sei_processes/new.html.erb_spec.rb deleted file mode 100644 index 3fa87601..00000000 --- a/spec/views/sei_processes/new.html.erb_spec.rb +++ /dev/null @@ -1,24 +0,0 @@ -require 'rails_helper' - -RSpec.describe "sei_processes/new", type: :view do - before(:each) do - assign(:sei_process, SeiProcess.new( - :user => nil, - :status => 1, - :code => "MyString" - )) - end - - it "renders new sei_process form" do - render - - assert_select "form[action=?][method=?]", sei_processes_path, "post" do - - assert_select "input[name=?]", "sei_process[user_id]" - - assert_select "input[name=?]", "sei_process[status]" - - assert_select "input[name=?]", "sei_process[code]" - end - end -end diff --git a/spec/views/sei_processes/show.html.erb_spec.rb b/spec/views/sei_processes/show.html.erb_spec.rb deleted file mode 100644 index d6a94c85..00000000 --- a/spec/views/sei_processes/show.html.erb_spec.rb +++ /dev/null @@ -1,18 +0,0 @@ -require 'rails_helper' - -RSpec.describe "sei_processes/show", type: :view do - before(:each) do - @sei_process = assign(:sei_process, SeiProcess.create!( - :user => nil, - :status => 2, - :code => "Code" - )) - end - - it "renders attributes in

" do - render - expect(rendered).to match(//) - expect(rendered).to match(/2/) - expect(rendered).to match(/Code/) - end -end From df05f960b47d28f5afc547bff4d127662cc8c6a1 Mon Sep 17 00:00:00 2001 From: afgmlff Date: Sat, 14 Nov 2020 18:46:55 -0300 Subject: [PATCH 26/36] updated start_date at creation (sei_process_controller.rb) and small accreditations index view changes --- app/controllers/sei_processes_controller.rb | 2 +- app/views/accreditations/index.html.erb | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/app/controllers/sei_processes_controller.rb b/app/controllers/sei_processes_controller.rb index c9fd913c..4469ccbd 100644 --- a/app/controllers/sei_processes_controller.rb +++ b/app/controllers/sei_processes_controller.rb @@ -46,7 +46,7 @@ def update format.json { render :index, status: :ok, location: @sei_process } if (@sei_process.status == 'Aprovado') && @sei_process.documents.attached? - Accreditation.create!(user_id: @sei_process.user_id, sei_process_id: @sei_process.id) + Accreditation.create!(user_id: @sei_process.user_id, sei_process_id: @sei_process.id, start_date: Date.current) end else diff --git a/app/views/accreditations/index.html.erb b/app/views/accreditations/index.html.erb index 4ae74a9b..0a5878c5 100644 --- a/app/views/accreditations/index.html.erb +++ b/app/views/accreditations/index.html.erb @@ -6,6 +6,7 @@ User + Sei Process ID Start date End date @@ -16,7 +17,7 @@ <% @accreditations.each do |accreditation| %> <%= accreditation.user.full_name %> - <%= accreditation.sei_process_id %> + <%= accreditation.sei_process_id %> <%= accreditation.start_date %> <%= accreditation.end_date %> <%= link_to 'Show', accreditation %> From df109ebde9da7757f80c8f4a622ff12828fc10e1 Mon Sep 17 00:00:00 2001 From: Gabriel Preihs Date: Sat, 14 Nov 2020 19:07:22 -0300 Subject: [PATCH 27/36] Returning to edit page on edit --- app/controllers/requirements_controller.rb | 4 ++-- app/views/requirements/edit.html.erb | 4 ++-- config/database.yml | 8 ++++++-- public/TestImage.png | Bin 0 -> 13849 bytes .../controllers/requirements_controller_spec.rb | 16 ++++++++++++++-- 5 files changed, 24 insertions(+), 8 deletions(-) create mode 100644 public/TestImage.png diff --git a/app/controllers/requirements_controller.rb b/app/controllers/requirements_controller.rb index ddfd0e6d..75d04d15 100644 --- a/app/controllers/requirements_controller.rb +++ b/app/controllers/requirements_controller.rb @@ -39,9 +39,9 @@ def create def delete_document_attachment @document = ActiveStorage::Attachment.find_by(id: params[:id]) + @requirement_id = params[:requirement_id] @document&.purge - # @asset = ActiveStorage::Attachment.find_by(id: params[:id]) - redirect_to :edit + redirect_to edit_requirement_path(@requirement_id) end # PATCH/PUT /requirements/1 diff --git a/app/views/requirements/edit.html.erb b/app/views/requirements/edit.html.erb index a8706164..4eba3e5d 100644 --- a/app/views/requirements/edit.html.erb +++ b/app/views/requirements/edit.html.erb @@ -4,7 +4,7 @@ <%= f.label "Título" %> <%= f.text_field :title %> <%= f.label "Conteúdo" %> - <%= f.text_field :title %> + <%= f.text_field :content %> <%= f.label "documentos" %> <%= f.file_field :documents, multiple: true %> <%= f.submit "Save", class: "btn btn-primary" %> @@ -16,7 +16,7 @@ <% @requirement.documents.each do | document | %>

<%= link_to document.filename, rails_blob_path(document, disposition: 'attachment') %> - <%= link_to 'Remover', delete_document_attachment_requirement_url(document.id, @requirement), + <%= link_to 'Remover', delete_document_attachment_requirement_url(document.id, requirement_id: @requirement.id), method: :delete, data: { } %> diff --git a/config/database.yml b/config/database.yml index 9930ddf5..8d527fda 100644 --- a/config/database.yml +++ b/config/database.yml @@ -19,6 +19,7 @@ default: &default encoding: unicode # For details on connection pooling, see Rails configuration guide # http://guides.rubyonrails.org/configuring.html#database-pooling + password: postgres pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> development: @@ -29,11 +30,11 @@ development: # To create additional roles in postgres see `$ createuser --help`. # When left blank, postgres will use the default role. This is # the same name as the operating system user that initialized the database. - #username: secretaria_ppgi + username: postgresql # The password associated with the postgres role (username). #password: - + password: postgres # Connect on a TCP socket. Omitted by default since the client uses a # domain socket that doesn't need configuration. Windows does not have # domain sockets, so uncomment these lines. @@ -59,6 +60,9 @@ test: <<: *default database: secretaria_ppgi_test + username: postgresql + password: postgres + # As with config/secrets.yml, you never want to store sensitive information, # like your database password, in your source code. If your source code is # ever seen by anyone, they now have access to your database. diff --git a/public/TestImage.png b/public/TestImage.png new file mode 100644 index 0000000000000000000000000000000000000000..b379c072733af999a6a23e81cb110a26f878efcc GIT binary patch literal 13849 zcmeHOeN)^YE4orii(xhIceocsJKLt5^OfXB;?|p zbIvMNTc`v`Pf_WL7_GH5@{u5m)Ix}W@|BnbDG4lu1VTP;ZgTJLg|o9af9`Cavp?=1 zIdAU0Z=UCQpZE9vp67Y<-ZQ`6mAZ7%3yS~%OSf-J*$qIn7=XyK1wSC~{5gN#9*g@*q*X!Pf?cR ziK9L%^~39fU#CTN$L-rJIJC3$itPPsHq+17oYCe!esBk0^LiEIrymY1$ZHCg67xuT zphUsXkD|Us5_TN2r+qgt>cn-)R) zg2n~86zDZV^92cmXT+UKFO%Y1X-Yk}pxj#Dhf+js$vGT4(U>T_)5V}3GSln~I>)jM}YubAPk%fm%xmAj{s2HR`mo|6N>bhzWatJdc9}X2u)1o_SN|&}9OT<{ zDL%tJ-+^d_3J&qbFlsO79&@(n5!B%m7Fy(?eqk`JB@t-idviKgpPJo`(662k{JjcE zzJ4Lst{+q>CHKqIi^qvJA-8c6VqZ+OBho+*GXnTy{&C@VkUD$SiVC99%&9U|B06Kx z<8DBlinuQ$fb44ZJ5b4Wb5OzjS$A8ja>{VoSBYqiK}U=nu|44fi@E-E8MH}p-P2qs zDc#`u%r&J#8`VuLc|-})T%8FE>*;s43}M`WL%k+omthYYPBHYlth^|Y)qe>dk{7MZ zbdz2nz2z}TCi|6?Z-N$43EhWJXMc6iIoWA*!(GhmPzvS z@yXglMYm!>(U#Kqn&&5bnjUZ9);tg19zCt-5Bkcjgq}B0NsL>hx%u7$3Ba{!W?sUM z;n}^MgdGtjTV!jKh|WhrBGCP5NWb;TO402Ya#*D`f=}R)PlaCcTN<0W{=6|{x@uYH z?2tGY<8t7!YagpTSg+TNT=Li2tj>^^8n>zUWG6J0$G*YyorTdhb?C-)f2^JK_0fHkyuxRrCg_ON^4UTv7yDjxQjHk*S?oz5IP z+iByC+6u@b>F>?5Hve~4F<*#dBKNJBx(I-u6W@Tgxirx}byE@|6yh(|In7mbstVXc zu&Nx4$CIml6;nL3oai%7Xi1cf*oXNLZkYxa&)w|1=scsvgmaEg8biZ+3^ml6&MHxv z1mGRqzw@f)>VzZ-i2?uX;(M?`r@cCl$9lFUI!lNj5xEPw4Q-SwQ+qadK~uu{647?( zR&8~v*Rc>xYn2-|0L_osHrVc!SVogkdccDZ8-q_`(rTxpu|j-S&XKGp$waqxuh%WXcXZ5HBJayb0PE^2?MlTPTZ$# zDV-oKw$zM;V{fo9%hT)=yHAkaOvYfSbygp9Q+g6?@WYnoMw3M6lXKh5{^xM(tmT}$ z)kk1`w~8gln(wIM(1p0yII+2sB$fK`C6!0mnYBmxPCQz4yOl)mx8iGIfbcm~zVA#@ z{(HDUJfWu6(+FqPm;ij@T`WtJHO>NhTn~;EIn`JvRFiRf%ozYKqC>K zhi#2A8{~*?KwLD8530~YAF&JoSylA`NYl-GKJz3ybo_@lZqrkZF?g~SoiRs{vF>pK zOl)QT$-Y3ly}7opPiZE05fkjEBquYd2|Zt(4a>XFh_bB|*?s2Ea2s>q(L?!oH)AYe zJt)bT@vjS`_{3!56*E54P^p%oGoinsf<9voEOl{U2JI+UB4bD#!soS+!9Ip> z<%YbMgi94wawM@)q9v!f->!mV8WudKMgJ1%T&$>;BQxccMfj*V7xwNBo|+IlUqz&A zQ_XHcrGgZdjO|=xICrZs?Q1QJxs-rIUZ>tard9M*hv-|CJMB zJX#3p0oo@tPUy8mQvpo{)S)msWYA%hPA%xHfTjZKJQST#(^UptApF-^!GCa=aQ09l zr>u`Tw|`5nLEyUe6|UJ|5lwxk50F2z1EKVJeEQvlXLQz>h87Ji8e0F;*P;A}2~ "test", "content" => "", "documents" => [file]} } let(:invalid_attributes) { - skip("Add a hash of attributes invalid for your model") + {"title" => ""} } # This should return the minimal set of values that should be in the session @@ -123,6 +124,17 @@ end end + describe "Documents Management"do + it 'purges a specific file' do + requirement = Requirement.create! valid_attributes + requirement.documents.each do | document | + expect { + delete :delete_document_attachment, params: { id: document.id } + }.to change(ActiveStorage::Attachment, :count).by(-1) + end + end + end + describe "DELETE #destroy" do it "destroys the requested requirement" do requirement = Requirement.create! valid_attributes From 90dbde31a6e2083ff8cf3c3b34bdeb51e37eb297 Mon Sep 17 00:00:00 2001 From: Gabriel Preihs Date: Sat, 14 Nov 2020 19:10:11 -0300 Subject: [PATCH 28/36] Solving missing id error --- spec/controllers/requirements_controller_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/controllers/requirements_controller_spec.rb b/spec/controllers/requirements_controller_spec.rb index 2ee12bc9..ee3eb7f9 100644 --- a/spec/controllers/requirements_controller_spec.rb +++ b/spec/controllers/requirements_controller_spec.rb @@ -129,7 +129,7 @@ requirement = Requirement.create! valid_attributes requirement.documents.each do | document | expect { - delete :delete_document_attachment, params: { id: document.id } + delete :delete_document_attachment, params: { id: document.id, requirement_id: requirement.id } }.to change(ActiveStorage::Attachment, :count).by(-1) end end From 2fa1a60411bc4bd37abf1989a1542896ebdcbab1 Mon Sep 17 00:00:00 2001 From: ngsylar Date: Sat, 14 Nov 2020 21:20:10 -0300 Subject: [PATCH 29/36] Accreditation Requirements is shown when opening a process --- app/controllers/sei_processes_controller.rb | 7 ++++++- app/models/requirement.rb | 2 +- app/views/home/index.html.erb | 12 +++++------ app/views/requirements/edit.html.erb | 3 ++- app/views/requirements/index.html.erb | 2 -- app/views/requirements/new.html.erb | 3 ++- app/views/sei_processes/index.html.erb | 23 +++++++++++++++++++-- app/views/sei_processes/new.html.erb | 16 ++++++++++++++ config/database.yml | 8 ++----- config/routes.rb | 3 ++- 10 files changed, 58 insertions(+), 21 deletions(-) diff --git a/app/controllers/sei_processes_controller.rb b/app/controllers/sei_processes_controller.rb index 4469ccbd..f88e8b19 100644 --- a/app/controllers/sei_processes_controller.rb +++ b/app/controllers/sei_processes_controller.rb @@ -4,7 +4,11 @@ class SeiProcessesController < ApplicationController # GET /sei_processes # GET /sei_processes.json def index - @sei_processes = SeiProcess.all + if current_user.role == "administrator" + @sei_processes = SeiProcess.all + else + @my_processes = SeiProcess.where(user_id: current_user.id) + end end # GET /sei_processes/1 @@ -14,6 +18,7 @@ def show # GET /sei_processes/new def new + @requirements = Requirement.find_by(title: 'Requisitos de Credenciamento') @sei_process = SeiProcess.new(user_id: current_user.id, status: 'Espera', code: '0') end diff --git a/app/models/requirement.rb b/app/models/requirement.rb index 6ae6949c..98106d97 100644 --- a/app/models/requirement.rb +++ b/app/models/requirement.rb @@ -1,4 +1,4 @@ class Requirement < ApplicationRecord - validates :title, presence: true + validates :title, presence: true, uniqueness: true has_many_attached :documents end diff --git a/app/views/home/index.html.erb b/app/views/home/index.html.erb index 14a0c3e8..ce5ab415 100644 --- a/app/views/home/index.html.erb +++ b/app/views/home/index.html.erb @@ -8,16 +8,16 @@

Cargo: <%= current_user.role %>

<% if current_user.role == "administrator" %> - <%= link_to "Atualizar Requisitos", requirements_path %> - <%= link_to "Processos Abertos", sei_processes_path %> + <%= link_to "Lista de Processos", sei_processes_path %> <%= link_to "Lista de Credenciamentos", accreditations_path %> -
- <%= link_to "Sair", destroy_user_session_path, method: :delete %> - + <% else %> - <%= link_to "Sair", destroy_user_session_path, method: :delete %> + <%= link_to "Meus Processos Abertos", sei_processes_path %> <% end %> + +
+ <%= link_to "Sair", destroy_user_session_path, method: :delete %> <% else %>

Entre para acessar o sistema!

diff --git a/app/views/requirements/edit.html.erb b/app/views/requirements/edit.html.erb index 4eba3e5d..589cca49 100644 --- a/app/views/requirements/edit.html.erb +++ b/app/views/requirements/edit.html.erb @@ -4,9 +4,10 @@ <%= f.label "Título" %> <%= f.text_field :title %> <%= f.label "Conteúdo" %> - <%= f.text_field :content %> + <%= f.text_area :content %> <%= f.label "documentos" %> <%= f.file_field :documents, multiple: true %> +
<%= f.submit "Save", class: "btn btn-primary" %> <% end %> diff --git a/app/views/requirements/index.html.erb b/app/views/requirements/index.html.erb index e2257557..a586f082 100644 --- a/app/views/requirements/index.html.erb +++ b/app/views/requirements/index.html.erb @@ -6,7 +6,6 @@ Title - Content @@ -15,7 +14,6 @@ <% @requirements.each do |requirement| %> <%= requirement.title %> - <%= requirement.content %> <%= link_to 'Show', requirement %> <%= link_to 'Edit', edit_requirement_path(requirement) %> <%= link_to 'Destroy', requirement, method: :delete, data: { confirm: 'Are you sure?' } %> diff --git a/app/views/requirements/new.html.erb b/app/views/requirements/new.html.erb index bca8b6b3..c566d2c1 100644 --- a/app/views/requirements/new.html.erb +++ b/app/views/requirements/new.html.erb @@ -4,9 +4,10 @@ <%= f.label "Título" %> <%= f.text_field :title %> <%= f.label "Conteúdo" %> - <%= f.text_field :content %> + <%= f.text_area :content %> <%= f.label "documentos" %> <%= f.file_field :documents, multiple: true %> +
<%= f.submit "Save", class: "btn btn-primary" %> <% end %> diff --git a/app/views/sei_processes/index.html.erb b/app/views/sei_processes/index.html.erb index a6b72490..4e9b3081 100644 --- a/app/views/sei_processes/index.html.erb +++ b/app/views/sei_processes/index.html.erb @@ -2,7 +2,7 @@

SEI Processos

-<% if user_signed_in? && (current_user.role == "administrator") %> +<% if current_user.role == "administrator" %> @@ -27,8 +27,27 @@ <% end %>
+ +<% else %> + + + + + + + + + + + <% @my_processes.each do |sei_process| %> + + + + + <% end %> + +
Código do ProcessoStatus
<%= sei_process.id %><%= sei_process.status %>
<% end %>
- <%= link_to 'Abrir Processo', new_sei_process_path %> diff --git a/app/views/sei_processes/new.html.erb b/app/views/sei_processes/new.html.erb index d4331717..d1f7f235 100644 --- a/app/views/sei_processes/new.html.erb +++ b/app/views/sei_processes/new.html.erb @@ -1,5 +1,21 @@

Abrir Processo

+<% if @requirements != nil %> +

<%= @requirements.title %>

+ <%= @requirements.content %> + + <% if @requirements.documents.attached? %> +

+ Documentos Necessários: + <% @requirements.documents.each do | document | %> +

+ <%= link_to document.filename, rails_blob_path(document, disposition: 'attachment') %> +
+ <% end %> +

+ <% end %> +<% end %> + <%= form_for @sei_process, html: { multipart: true } do |f| %> <%= f.hidden_field :user_id %> <%= f.hidden_field :status %> diff --git a/config/database.yml b/config/database.yml index 8d527fda..9930ddf5 100644 --- a/config/database.yml +++ b/config/database.yml @@ -19,7 +19,6 @@ default: &default encoding: unicode # For details on connection pooling, see Rails configuration guide # http://guides.rubyonrails.org/configuring.html#database-pooling - password: postgres pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> development: @@ -30,11 +29,11 @@ development: # To create additional roles in postgres see `$ createuser --help`. # When left blank, postgres will use the default role. This is # the same name as the operating system user that initialized the database. - username: postgresql + #username: secretaria_ppgi # The password associated with the postgres role (username). #password: - password: postgres + # Connect on a TCP socket. Omitted by default since the client uses a # domain socket that doesn't need configuration. Windows does not have # domain sockets, so uncomment these lines. @@ -60,9 +59,6 @@ test: <<: *default database: secretaria_ppgi_test - username: postgresql - password: postgres - # As with config/secrets.yml, you never want to store sensitive information, # like your database password, in your source code. If your source code is # ever seen by anyone, they now have access to your database. diff --git a/config/routes.rb b/config/routes.rb index 805204cf..506310d8 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -4,12 +4,13 @@ resources :accreditations resources :accreditations resources :sei_processes - resources :requirements + resources :requirements do member do delete :delete_document_attachment end end + get 'home/index' devise_for :users # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html From 296f50f4edfc6e40bd90f64136837523912a9185 Mon Sep 17 00:00:00 2001 From: ngsylar Date: Sat, 14 Nov 2020 22:44:45 -0300 Subject: [PATCH 30/36] Adjustments to Requirements and Processes views --- app/controllers/requirements_controller.rb | 6 ++-- app/views/home/index.html.erb | 3 +- app/views/requirements/edit.html.erb | 38 ++++++++++++---------- app/views/requirements/index.html.erb | 19 ++++++----- app/views/requirements/new.html.erb | 10 +++--- app/views/requirements/show.html.erb | 14 ++++---- app/views/sei_processes/edit.html.erb | 2 +- app/views/sei_processes/index.html.erb | 13 +++++--- app/views/sei_processes/new.html.erb | 2 +- app/views/sei_processes/show.html.erb | 28 +++++++++++----- 10 files changed, 76 insertions(+), 59 deletions(-) diff --git a/app/controllers/requirements_controller.rb b/app/controllers/requirements_controller.rb index 75d04d15..fbe65d66 100644 --- a/app/controllers/requirements_controller.rb +++ b/app/controllers/requirements_controller.rb @@ -28,7 +28,7 @@ def create respond_to do |format| if @requirement.save - format.html { redirect_to @requirement, notice: 'Requirement was successfully created.' } + format.html { redirect_to @requirement, notice: 'Requisitos criados com sucesso!' } format.json { render :show, status: :created, location: @requirement } else format.html { render :new } @@ -49,7 +49,7 @@ def delete_document_attachment def update respond_to do |format| if @requirement.update(requirement_params) - format.html { redirect_to @requirement, notice: 'Requirement was successfully updated.' } + format.html { redirect_to @requirement, notice: 'Requisitos atualizados com sucesso!' } format.json { render :show, status: :ok, location: @requirement } else format.html { render :edit } @@ -63,7 +63,7 @@ def update def destroy @requirement.destroy respond_to do |format| - format.html { redirect_to requirements_url, notice: 'Requirement was successfully destroyed.' } + format.html { redirect_to requirements_url, notice: 'Requisitos excluídos com sucesso!' } format.json { head :no_content } end end diff --git a/app/views/home/index.html.erb b/app/views/home/index.html.erb index ce5ab415..24d2b84e 100644 --- a/app/views/home/index.html.erb +++ b/app/views/home/index.html.erb @@ -1,5 +1,4 @@

Início

-

Find me in app/views/home/index.html.erb

<% if user_signed_in? %>

Usuário atual

@@ -8,7 +7,7 @@

Cargo: <%= current_user.role %>

<% if current_user.role == "administrator" %> - <%= link_to "Atualizar Requisitos", requirements_path %> + <%= link_to "Lista de Requisitos", requirements_path %> <%= link_to "Lista de Processos", sei_processes_path %> <%= link_to "Lista de Credenciamentos", accreditations_path %> diff --git a/app/views/requirements/edit.html.erb b/app/views/requirements/edit.html.erb index 589cca49..097c6c14 100644 --- a/app/views/requirements/edit.html.erb +++ b/app/views/requirements/edit.html.erb @@ -1,30 +1,32 @@ -

Editing Requirement

+

Editar Requisitos

<%= form_for @requirement, html: { multipart: true } do |f| %> - <%= f.label "Título" %> + <%= f.label "Tipo dos Requisitos" %> <%= f.text_field :title %> <%= f.label "Conteúdo" %> <%= f.text_area :content %> - <%= f.label "documentos" %> + + <% if @requirement.documents.attached? %> +
Documentos anexados:
+ <% @requirement.documents.each do | document | %> +
+ <%= link_to document.filename, rails_blob_path(document, disposition: 'attachment') %> + <%= link_to 'Remover', delete_document_attachment_requirement_url(document.id, requirement_id: @requirement.id), + method: :delete, + data: { } + %> +
+ <% end %> + <% end %> +
+ <%= f.label "Adicionar documentos:" %> <%= f.file_field :documents, multiple: true %>
- <%= f.submit "Save", class: "btn btn-primary" %> + <%= f.submit "Salvar", class: "btn btn-primary" %> <% end %>
-<% if @requirement.documents.attached? %> -
Existem documentos anexados:
- <% @requirement.documents.each do | document | %> -
- <%= link_to document.filename, rails_blob_path(document, disposition: 'attachment') %> - <%= link_to 'Remover', delete_document_attachment_requirement_url(document.id, requirement_id: @requirement.id), - method: :delete, - data: { } - %> -
- <% end %> -<% end %>
-<%= link_to 'Show', @requirement %> | -<%= link_to 'Back', requirements_path %> +<%= link_to 'Mostrar', @requirement %> | +<%= link_to 'Voltar', requirements_path %> diff --git a/app/views/requirements/index.html.erb b/app/views/requirements/index.html.erb index a586f082..d11e2de3 100644 --- a/app/views/requirements/index.html.erb +++ b/app/views/requirements/index.html.erb @@ -1,11 +1,11 @@ -

<%= notice %>

+

-

Requirements

+

Informações de Requisitos

- + @@ -14,14 +14,15 @@ <% @requirements.each do |requirement| %> - - - + + + <% end %>
TitleTipo de Requisito
<%= requirement.title %><%= link_to 'Show', requirement %><%= link_to 'Edit', edit_requirement_path(requirement) %><%= link_to 'Destroy', requirement, method: :delete, data: { confirm: 'Are you sure?' } %><%= link_to 'Mostrar', requirement %><%= link_to 'Editar', edit_requirement_path(requirement) %><%= link_to 'Excluir', requirement, method: :delete, data: { confirm: 'Tem certeza que deseja excluir essa Informação?' } %>
-
- -<%= link_to 'New Requirement', new_requirement_path %> +
+<%= link_to 'Adicionar Informação de Requisitos', new_requirement_path %> +
+<%= link_to 'Página Inicial', home_index_path %> diff --git a/app/views/requirements/new.html.erb b/app/views/requirements/new.html.erb index c566d2c1..1f08de21 100644 --- a/app/views/requirements/new.html.erb +++ b/app/views/requirements/new.html.erb @@ -1,14 +1,14 @@ -

New Requirement

+

Nova Informação de Requisitos

<%= form_for @requirement, html: { multipart: true } do |f| %> - <%= f.label "Título" %> + <%= f.label "Tipo dos Requisitos" %> <%= f.text_field :title %> <%= f.label "Conteúdo" %> <%= f.text_area :content %> - <%= f.label "documentos" %> + <%= f.label "Anexar documentos:" %> <%= f.file_field :documents, multiple: true %>
- <%= f.submit "Save", class: "btn btn-primary" %> + <%= f.submit "Salvar", class: "btn btn-primary" %> <% end %> -<%= link_to 'Back', requirements_path %> +<%= link_to 'Voltar', requirements_path %> diff --git a/app/views/requirements/show.html.erb b/app/views/requirements/show.html.erb index 499982a0..cec4f83b 100644 --- a/app/views/requirements/show.html.erb +++ b/app/views/requirements/show.html.erb @@ -1,19 +1,19 @@ -

<%= notice %>

+

- Title: + Tipo dos Requisitos: <%= @requirement.title %>

- Content: + Conteúdo: <%= @requirement.content %>

<% if @requirement.documents.attached? %>

- existem documentos acoplados - <% @requirement.documents.each do | document | %> + Documentos anexados + <% @requirement.documents.each do |document| %>

<%= link_to document.filename, rails_blob_path(document, disposition: 'attachment') %>
@@ -21,5 +21,5 @@

<% end %> -<%= link_to 'Edit', edit_requirement_path(@requirement) %> | -<%= link_to 'Back', requirements_path %> +<%= link_to 'Editar', edit_requirement_path(@requirement) %> | +<%= link_to 'Voltar', requirements_path %> diff --git a/app/views/sei_processes/edit.html.erb b/app/views/sei_processes/edit.html.erb index 53c15b17..17111c21 100644 --- a/app/views/sei_processes/edit.html.erb +++ b/app/views/sei_processes/edit.html.erb @@ -11,7 +11,7 @@ <% if @sei_process.documents.attached? %>

- Documentos Anexados + Documentos anexados: <% @sei_process.documents.each do | document | %>

<%= link_to document.filename, rails_blob_path(document, disposition: 'attachment') %> diff --git a/app/views/sei_processes/index.html.erb b/app/views/sei_processes/index.html.erb index 4e9b3081..610644f0 100644 --- a/app/views/sei_processes/index.html.erb +++ b/app/views/sei_processes/index.html.erb @@ -10,7 +10,7 @@ Matrícula Código do Processo Status - + @@ -21,8 +21,11 @@ <%= sei_process.user.registration %> <%= sei_process.id %> <%= sei_process.status %> - <%= link_to 'Gerenciar', edit_sei_process_path(sei_process) %> - <%= link_to 'Excluir', sei_process, method: :delete, data: { confirm: 'Are you sure?' } %> + <% if sei_process.status == 'Aprovado' %> + <%= link_to 'Mostrar', sei_process_path(sei_process) %> + <% else %> + <%= link_to 'Avaliar', edit_sei_process_path(sei_process) %> + <% end %> <% end %> @@ -49,5 +52,7 @@ <% end %> -
+
<%= link_to 'Abrir Processo', new_sei_process_path %> +
+<%= link_to 'Página Inicial', home_index_path %> diff --git a/app/views/sei_processes/new.html.erb b/app/views/sei_processes/new.html.erb index d1f7f235..39c16a63 100644 --- a/app/views/sei_processes/new.html.erb +++ b/app/views/sei_processes/new.html.erb @@ -27,4 +27,4 @@ <% end %>
-<%= link_to 'Back', sei_processes_path %> +<%= link_to 'Voltar', sei_processes_path %> diff --git a/app/views/sei_processes/show.html.erb b/app/views/sei_processes/show.html.erb index a8e9e4fc..6dc27079 100644 --- a/app/views/sei_processes/show.html.erb +++ b/app/views/sei_processes/show.html.erb @@ -1,18 +1,28 @@ -

<%= notice %>

+

<%= "Processo #{@sei_process.id}" %>

- User: - <%= @sei_process.user %> + Nome: + <%= @sei_process.user.full_name %>

-

- Status: - <%= @sei_process.status %> + Matrícula: + <%= @sei_process.user.registration %>

+<% if @sei_process.documents.attached? %> +

+ Documentos anexados: + <% @sei_process.documents.each do | document | %> +

+ <%= link_to document.filename, rails_blob_path(document, disposition: 'attachment') %> +
+ <% end %> +

+<% end %> +

- Code: - <%= @sei_process.id %> + Status: + <%= @sei_process.status %>

-<%= link_to 'Back', sei_processes_path %> +<%= link_to 'Voltar', sei_processes_path %> From 070ff368209659697ecbdcde7587d88e8a072a36 Mon Sep 17 00:00:00 2001 From: ngsylar Date: Sat, 14 Nov 2020 23:36:25 -0300 Subject: [PATCH 31/36] Adjustments to Accreditation views --- app/controllers/accreditations_controller.rb | 1 - app/controllers/sei_processes_controller.rb | 2 +- app/views/accreditations/edit.html.erb | 54 +++++++++++++++----- app/views/accreditations/index.html.erb | 27 +++++----- app/views/accreditations/new.html.erb | 11 ---- app/views/accreditations/show.html.erb | 41 ++++++++++----- 6 files changed, 85 insertions(+), 51 deletions(-) delete mode 100644 app/views/accreditations/new.html.erb diff --git a/app/controllers/accreditations_controller.rb b/app/controllers/accreditations_controller.rb index 52d333e7..a10545b4 100644 --- a/app/controllers/accreditations_controller.rb +++ b/app/controllers/accreditations_controller.rb @@ -14,7 +14,6 @@ def show # GET /accreditations/new def new - @accreditation = Accreditation.new(sei_proccess_id: 0) end # GET /accreditations/1/edit diff --git a/app/controllers/sei_processes_controller.rb b/app/controllers/sei_processes_controller.rb index f88e8b19..b0ae0b4e 100644 --- a/app/controllers/sei_processes_controller.rb +++ b/app/controllers/sei_processes_controller.rb @@ -51,7 +51,7 @@ def update format.json { render :index, status: :ok, location: @sei_process } if (@sei_process.status == 'Aprovado') && @sei_process.documents.attached? - Accreditation.create!(user_id: @sei_process.user_id, sei_process_id: @sei_process.id, start_date: Date.current) + Accreditation.create!(user_id: @sei_process.user_id, sei_process_id: @sei_process.id) end else diff --git a/app/views/accreditations/edit.html.erb b/app/views/accreditations/edit.html.erb index 2e359887..5307b75f 100644 --- a/app/views/accreditations/edit.html.erb +++ b/app/views/accreditations/edit.html.erb @@ -1,20 +1,48 @@ -

Editing Accreditation

+

Definir Prazo de Credenciamento

+ +

+ Código do Processo SEI: + <%= @accreditation.sei_process_id %> +

+

+ Nome: + <%= @accreditation.user.full_name %> +

+

+ Matrícula: + <%= @accreditation.user.registration %> +

+ +<% if @accreditation.sei_process.documents.attached? %> +

+ Documentos anexados: + <% @accreditation.sei_process.documents.each do | document | %> +

+ <%= link_to document.filename, rails_blob_path(document, disposition: 'attachment') %> +
+ <% end %> +

+<% end %> +
+ +<% if @accreditation.start_date != nil %> +

+ Data de Início: + <%= @accreditation.start_date %> +

+<% end %> <%= form_for @accreditation, html: { multipart: true } do |f| %> - User: - <%= f.number_field :user_id %> - Start date: - <%= f.date_field :start_date %> - End date: + <% if @accreditation.start_date == nil %> + <%= f.label "Data de Início" %> + <%= f.date_field :start_date, value: Date.current %> + <% end %> + <%= f.label "Data de Fim" %> <%= f.date_field :end_date %>
<%= f.submit "Save", class: "btn btn-primary" %> <% end %> - -<%= link_to 'Show', @accreditation %> | -<%= link_to 'Back', accreditations_path %> - - - - +
+<%= link_to 'Mostrar', @accreditation %> | +<%= link_to 'Voltar', accreditations_path %> diff --git a/app/views/accreditations/index.html.erb b/app/views/accreditations/index.html.erb index 0a5878c5..e8a7a3a2 100644 --- a/app/views/accreditations/index.html.erb +++ b/app/views/accreditations/index.html.erb @@ -1,15 +1,16 @@

-

Accreditations

+

Credenciamentos

- - - - - + + + + + + @@ -17,17 +18,19 @@ <% @accreditations.each do |accreditation| %> + - - - + <% if accreditation.start_date != nil && accreditation.end_date != nil %> + + <% else %> + + <% end %> <% end %>
UserSei Process IDStart dateEnd dateNomeMatrículaCódigo SEIData de InícioData de Fim
<%= accreditation.user.full_name %><%= accreditation.user.registration %> <%= accreditation.sei_process_id %> <%= accreditation.start_date %> <%= accreditation.end_date %><%= link_to 'Show', accreditation %><%= link_to 'Edit', edit_accreditation_path(accreditation) %><%= link_to 'Destroy', accreditation, method: :delete, data: { confirm: 'Are you sure?' } %><%= link_to 'Mostrar', accreditation %><%= link_to 'Definir Prazo', edit_accreditation_path(accreditation) %>
-
- -<%= link_to 'New Accreditation', new_accreditation_path %> \ No newline at end of file +
+<%= link_to 'Página Inicial', home_index_path %> diff --git a/app/views/accreditations/new.html.erb b/app/views/accreditations/new.html.erb deleted file mode 100644 index 53a1b29d..00000000 --- a/app/views/accreditations/new.html.erb +++ /dev/null @@ -1,11 +0,0 @@ -

New Accreditation

-<%= form_for @accreditation, html: { multipart: true } do |f| %> - <%= f.hidden_field :user_id %> - <%= f.hidden_field :start_date %> - <%= f.hidden_field :end_date %> -
- <%= f.submit "Save", class: "btn btn-primary" %> -<% end %> - -
-<%= link_to 'Back', accreditations_path %> \ No newline at end of file diff --git a/app/views/accreditations/show.html.erb b/app/views/accreditations/show.html.erb index a4f86280..83e41451 100644 --- a/app/views/accreditations/show.html.erb +++ b/app/views/accreditations/show.html.erb @@ -1,24 +1,39 @@ -

<%= notice %>

+

+ +

Credenciamento

- User: - <%= @accreditation.user %> + Código do Processo SEI: + <%= @accreditation.sei_process_id %>

-

- Start date: + Nome: + <%= @accreditation.user.full_name %> +

+

+ Matrícula: + <%= @accreditation.user.registration %> +

+

+ Data de Início: <%= @accreditation.start_date %>

-

- End date: + Data de Fim: <%= @accreditation.end_date %>

-

- Sei process: - <%= @accreditation.sei_process %> -

+<% if @accreditation.sei_process.documents.attached? %> +

+ Documentos anexados: + <% @accreditation.sei_process.documents.each do | document | %> +

+ <%= link_to document.filename, rails_blob_path(document, disposition: 'attachment') %> +
+ <% end %> +

+<% end %> +
-<%= link_to 'Edit', edit_accreditation_path(@accreditation) %> | -<%= link_to 'Back', accreditations_path %> +<%= link_to 'Editar', edit_accreditation_path(@accreditation) %> | +<%= link_to 'Voltar', accreditations_path %> From dd56640507cba2635c9a6fe761f0e41b7751cee3 Mon Sep 17 00:00:00 2001 From: ngsylar Date: Sun, 15 Nov 2020 04:23:41 -0300 Subject: [PATCH 32/36] Requirements BDD done --- .rake_tasks~ | 55 +++++++ app/controllers/accreditations_controller.rb | 1 + .../{_form.html.erb => _form_new.html.erb} | 0 app/views/accreditations/new.html.erb | 5 + app/views/requirements/_form_edit.html.erb | 46 ++++++ .../{_form.html.erb => _form_new.html.erb} | 11 +- app/views/requirements/edit.html.erb | 28 +--- app/views/requirements/new.html.erb | 11 +- config/routes.rb | 1 - features.html | 141 ++++++++++-------- features/requisitos_necessarios.feature | 12 +- .../Formul\303\241rio de Credenciamento.doc" | Bin 0 -> 44544 bytes features/spike.feature | 9 +- .../credenciamento_professores_steps.rb | 15 +- features/support/paths.rb | 8 +- report.json | 2 +- 16 files changed, 216 insertions(+), 129 deletions(-) create mode 100644 .rake_tasks~ rename app/views/accreditations/{_form.html.erb => _form_new.html.erb} (100%) create mode 100644 app/views/accreditations/new.html.erb create mode 100644 app/views/requirements/_form_edit.html.erb rename app/views/requirements/{_form.html.erb => _form_new.html.erb} (69%) create mode 100644 "features/resources/Formul\303\241rio de Credenciamento.doc" diff --git a/.rake_tasks~ b/.rake_tasks~ new file mode 100644 index 00000000..c00fc44b --- /dev/null +++ b/.rake_tasks~ @@ -0,0 +1,55 @@ +about +active_storage:install +app:template +app:update +assets:clean[keep] +assets:clobber +assets:environment +assets:precompile +cache_digests:dependencies +cache_digests:nested_dependencies +cucumber +cucumber:all +cucumber:ok +cucumber:rerun +cucumber:wip +db:create +db:drop +db:environment:set +db:fixtures:load +db:migrate +db:migrate:status +db:rollback +db:schema:cache:clear +db:schema:cache:dump +db:schema:dump +db:schema:load +db:seed +db:setup +db:structure:dump +db:structure:load +db:version +dev:cache +initializers +log:clear +middleware +notes +notes:custom +restart +routes +secret +spec +spec:controllers +spec:helpers +spec:models +spec:requests +spec:routing +spec:views +stats +test +test:db +test:system +time:zones[country_or_offset] +tmp:clear +tmp:create +yarn:install diff --git a/app/controllers/accreditations_controller.rb b/app/controllers/accreditations_controller.rb index a10545b4..ccc79d5b 100644 --- a/app/controllers/accreditations_controller.rb +++ b/app/controllers/accreditations_controller.rb @@ -14,6 +14,7 @@ def show # GET /accreditations/new def new + @accreditation = Accreditation.new end # GET /accreditations/1/edit diff --git a/app/views/accreditations/_form.html.erb b/app/views/accreditations/_form_new.html.erb similarity index 100% rename from app/views/accreditations/_form.html.erb rename to app/views/accreditations/_form_new.html.erb diff --git a/app/views/accreditations/new.html.erb b/app/views/accreditations/new.html.erb new file mode 100644 index 00000000..c5413d5d --- /dev/null +++ b/app/views/accreditations/new.html.erb @@ -0,0 +1,5 @@ +

New Accreditation

+ +<%= render 'form_new', accreditation: @accreditation %> + +<%= link_to 'Back', accreditations_path %> \ No newline at end of file diff --git a/app/views/requirements/_form_edit.html.erb b/app/views/requirements/_form_edit.html.erb new file mode 100644 index 00000000..95a4d603 --- /dev/null +++ b/app/views/requirements/_form_edit.html.erb @@ -0,0 +1,46 @@ +<%= form_with(model: requirement, local: true) do |form| %> + <% if requirement.errors.any? %> +
+

<%= pluralize(requirement.errors.count, "error") %> prohibited this requirement from being saved:

+ +
    + <% requirement.errors.full_messages.each do |message| %> +
  • <%= message %>
  • + <% end %> +
+
+ <% end %> + +
+ <%= form.label :title, "Título" %> + <%= form.text_field :title %> +
+ +
+ <%= form.label :content, "Conteúdo" %> + <%= form.text_area :content %> +
+ + <% if @requirement.documents.attached? %> +
Documentos anexados:
+ <% @requirement.documents.each do | document | %> +
+ <%= link_to document.filename, rails_blob_path(document, disposition: 'attachment') %> + <%= link_to 'Remover', delete_document_attachment_requirement_url(document.id, requirement_id: @requirement.id), + method: :delete, + data: { } + %> +
+ <% end %> + <% end %> +
+ +
+ <%= form.label :documents, "Documentos" %> + <%= form.file_field :documents, multiple: true %> +
+ +
+ <%= form.submit "Salvar" %> +
+<% end %> diff --git a/app/views/requirements/_form.html.erb b/app/views/requirements/_form_new.html.erb similarity index 69% rename from app/views/requirements/_form.html.erb rename to app/views/requirements/_form_new.html.erb index f98ebbc6..4fdb5112 100644 --- a/app/views/requirements/_form.html.erb +++ b/app/views/requirements/_form_new.html.erb @@ -12,16 +12,21 @@ <% end %>
- <%= form.label :title %> + <%= form.label :title, "Título" %> <%= form.text_field :title %>
- <%= form.label :content %> + <%= form.label :content, "Conteúdo" %> <%= form.text_area :content %>
+
+ <%= form.label :documents, "Documentos" %> + <%= form.file_field :documents, multiple: true %> +
+
- <%= form.submit %> + <%= form.submit "Enviar" %>
<% end %> diff --git a/app/views/requirements/edit.html.erb b/app/views/requirements/edit.html.erb index 097c6c14..1e0ff4ca 100644 --- a/app/views/requirements/edit.html.erb +++ b/app/views/requirements/edit.html.erb @@ -1,32 +1,6 @@

Editar Requisitos

-<%= form_for @requirement, html: { multipart: true } do |f| %> - <%= f.label "Tipo dos Requisitos" %> - <%= f.text_field :title %> - <%= f.label "Conteúdo" %> - <%= f.text_area :content %> +<%= render 'form_edit', requirement: @requirement %> - <% if @requirement.documents.attached? %> -
Documentos anexados:
- <% @requirement.documents.each do | document | %> -
- <%= link_to document.filename, rails_blob_path(document, disposition: 'attachment') %> - <%= link_to 'Remover', delete_document_attachment_requirement_url(document.id, requirement_id: @requirement.id), - method: :delete, - data: { } - %> -
- <% end %> - <% end %> -
- <%= f.label "Adicionar documentos:" %> - <%= f.file_field :documents, multiple: true %> -
- <%= f.submit "Salvar", class: "btn btn-primary" %> -<% end %> - -
- -
<%= link_to 'Mostrar', @requirement %> | <%= link_to 'Voltar', requirements_path %> diff --git a/app/views/requirements/new.html.erb b/app/views/requirements/new.html.erb index 1f08de21..ad004d74 100644 --- a/app/views/requirements/new.html.erb +++ b/app/views/requirements/new.html.erb @@ -1,14 +1,5 @@

Nova Informação de Requisitos

-<%= form_for @requirement, html: { multipart: true } do |f| %> - <%= f.label "Tipo dos Requisitos" %> - <%= f.text_field :title %> - <%= f.label "Conteúdo" %> - <%= f.text_area :content %> - <%= f.label "Anexar documentos:" %> - <%= f.file_field :documents, multiple: true %> -
- <%= f.submit "Salvar", class: "btn btn-primary" %> -<% end %> +<%= render 'form_new', requirement: @requirement %> <%= link_to 'Voltar', requirements_path %> diff --git a/config/routes.rb b/config/routes.rb index 506310d8..e0f4a3df 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true Rails.application.routes.draw do - resources :accreditations resources :accreditations resources :sei_processes diff --git a/features.html b/features.html index 061ff6af..1d231820 100644 --- a/features.html +++ b/features.html @@ -303,71 +303,82 @@