Refactorings and gui improvements
Some checks failed
/ Run tests (push) Successful in 1m22s
/ Run system tests (push) Failing after 1m33s
/ Build, push and deploy image (push) Successful in 3m22s

This commit is contained in:
david 2024-11-03 21:58:25 +01:00
parent c965e03e5a
commit d1294c2fc4
46 changed files with 358 additions and 128020 deletions

View file

@ -66,3 +66,73 @@
.highlight-when-nonempty:not([value=""]) { .highlight-when-nonempty:not([value=""]) {
@extend .border-primary @extend .border-primary
} }
@mixin details-icon($color) {
background: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="rgb(#{$color})" class="bi bi-chevron-right" viewBox="0 0 16 16"><path fill-rule="evenodd" d="M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708"/></svg>');
background-size: cover;
}
.page_nav nav ul {
padding-left: 0;
list-style-type: none;
line-height: 2rem;
a {
color: var(--bs-text);
text-decoration: none;
}
a:hover {
text-decoration: underline;
}
ul {
// padding-left: 1.5rem;
}
}
summary,
summary a {
font-size: 1rem;
font-style: normal;
}
summary {
display: flex;
line-height: 2rem;
}
summary::before {
@include details-icon(to-rgb(map-get($theme-colors, "dark")));
content: '';
float: inline-end;
width: 0.7rem;
height: 1rem;
margin-top: 0.5rem;
margin-right: 6px;
// background: url('chevron-right.svg');
// background-size: cover;
margin-left: 0;
transition: 0.2s;
}
@include color-mode(dark) {
summary::before {
@include details-icon(to-rgb(map-get($theme-colors, "light")));
// content: '';
// float: inline-end;
// width: 0.7rem;
// height: 1rem;
// margin-top: 0.5rem;
// margin-right: 6px;
// // background: url('chevron-right.svg');
// // background-size: cover;
// margin-left: 0;
// transition: 0.2s;
}
}
details[open]>summary::before {
transform: rotate(90deg);
}

View file

@ -7,7 +7,7 @@ class ChecksController < ApplicationController
# GET /checks or /checks.json # GET /checks or /checks.json
def index def index
@pagy, @checks = pagy(Check.filter_by(filter_params).order(:external_number)) @pagy, @checks = pagy(Check.filter_by(filter_params).order(:external_number_1, :external_number_2, :external_number_3))
end end
# GET /checks/1 or /checks/1.json # GET /checks/1 or /checks/1.json
@ -69,7 +69,7 @@ class ChecksController < ApplicationController
end end
def filter_params def filter_params
@filter_params ||= params.permit(filter: [ :s, priority: [], conformity_level: [], standard_ids: [], principle_id: [], target_disabilities: []])[:filter] || {} @filter_params ||= params.permit(filter: [ :s, priority: [], conformity_level: [], standard_ids: [], principle_id: [], target_disabilities: [] ])[:filter] || {}
end end
private private

View file

@ -58,7 +58,7 @@ class ElementsController < ApplicationController
# DELETE /elements/1 # DELETE /elements/1
def destroy def destroy
@element.destroy! @element.destroy!
redirect_to elements_url, notice: "Element was successfully destroyed.", status: :see_other redirect_to page_elements_url(@element.page), notice: "Element was successfully destroyed.", status: :see_other
end end
private private

View file

@ -44,7 +44,7 @@ class PagesController < ApplicationController
# DELETE /pages/1 # DELETE /pages/1
def destroy def destroy
@page.destroy! @page.destroy!
redirect_to pages_url, notice: "Page was successfully destroyed.", status: :see_other redirect_to report_pages_url(@page.report), notice: "Page was successfully destroyed.", status: :see_other
end end
private private

View file

@ -60,7 +60,7 @@ class SuccessCriteriaController < ApplicationController
@success_criterion.destroy! @success_criterion.destroy!
respond_to do |format| respond_to do |format|
format.html do format.html do
redirect_to success_criteria_url, notice: "Erfolgskriterium was successfully destroyed.", status: :see_other redirect_to element_success_criteria_url(@success_criterion.element), notice: "Erfolgskriterium was successfully destroyed.", status: :see_other
end end
format.turbo_stream format.turbo_stream
end end

View file

@ -24,4 +24,8 @@ module ApplicationHelper
yield(value) yield(value)
end end
def current_page_displayed(page)
@current_page&.id == page.id ? "open" : nil
end
end end

View file

@ -7,18 +7,21 @@ export default class extends Controller {
static targets = ["cancel"] static targets = ["cancel"]
initialState = null initialState = null
isSubmitted = false
connect() { connect() {
console.log("connect unsaved-changes")
this.initialState = this.formState() this.initialState = this.formState()
console.log(this.cancelTargets)
console.log("usaved-changes connect ", this.cancelTargets)
window.addEventListener("beforeunload", (event) => this.leavingPage(event)) window.addEventListener("beforeunload", (event) => this.leavingPage(event))
document.addEventListener('turbo:before-visit', (e) => this.leavingPage(e)) document.addEventListener('turbo:before-visit', (e) => this.leavingPage(e))
this.element.addEventListener("submit", (_) => this.initialState = null) this.element.addEventListener("submit", (_) => this.isSubmitted = true)
this.cancelTargets.forEach(element => { // this.cancelTargets.forEach(element => {
console.log(element) // console.log(element)
element.addEventListener("onclick", (_) => this.initialState = null) // element.addEventListener("onclick", (_) => this.reset())
}); // });
} }
formState() { formState() {
@ -27,21 +30,23 @@ export default class extends Controller {
.sort(x => x[0])) .sort(x => x[0]))
} }
reset() {
console.log("reset")
this.initialState = this.formState()
}
hasChanged() {
console.log("hasChanged result", this.initialState != this.formState())
return this.formState() != this.initialState
}
leavingPage(event) { leavingPage(event) {
console.log(event.type) console.log(event.type)
if (this.initialState == null || this.initialState == this.formState()) { if (this.isSubmitted || !this.hasChanged()) {
return return
} }
if (event.type == "turbo:before-visit") {
if (!window.confirm(LEAVE_ALERT)) { if (!window.confirm(LEAVE_ALERT)) {
event.preventDefault() event.preventDefault()
} else {
this.initialState = null
}
} else {
this.initialState = null
event.returnValue = LEAVE_ALERT;
return event.returnValue;
} }
} }
} }

View file

@ -76,7 +76,7 @@ class Check < ApplicationRecord
relation = relation.joins(:standards).where(standards: { id: value }) relation = relation.joins(:standards).where(standards: { id: value })
when "target_disabilities" when "target_disabilities"
cond = String.new cond = String.new
value.intersection(%w(auditory visual physical cognitive)).each_with_index do |v, i| value.intersection(%w[auditory visual physical cognitive]).each_with_index do |v, i|
if i == 0 if i == 0
cond << "checks.#{v} = 1" cond << "checks.#{v} = 1"
else else
@ -123,6 +123,10 @@ class Check < ApplicationRecord
end end
def display_label def display_label
[external_number, name_de].compact_blank.join(" ") [ external_number, name_de ].compact_blank.join(" ")
end
def external_number
[ external_number_1, external_number_2, external_number_3 ].compact_blank.join(".")
end end
end end

View file

@ -5,7 +5,6 @@ class ChecklistEntry < ApplicationRecord
belongs_to :check belongs_to :check
before_validation :set_position before_validation :set_position
before_create :update_positions
before_update :update_positions, if: :position_changed? before_update :update_positions, if: :position_changed?
def set_position def set_position

View file

@ -18,7 +18,7 @@ class Element < ApplicationRecord
def level def level
return nil return nil
return nil unless success_criteria.all(&:result) return nil unless success_criteria.all(&:result)
element
min_failed = success_criteria.select(&:failed?).map(&:level).min min_failed = success_criteria.select(&:failed?).map(&:level).min
possible_levels = success_criteria.select(&:passed?).map(&:level).uniq possible_levels = success_criteria.select(&:passed?).map(&:level).uniq
@ -37,4 +37,8 @@ class Element < ApplicationRecord
Rails.logger.debug("element: position #{position}") Rails.logger.debug("element: position #{position}")
self.position ||= (page.elements.pluck(:position).max || 0) + 1 self.position ||= (page.elements.pluck(:position).max || 0) + 1
end end
def number
"#{page.position}.#{position}"
end
end end

View file

@ -3,7 +3,7 @@
<%= link_to "Abbrechen", checklist_entry.persisted? ? checklist_entry : checklist_entry.checklist, class: "btn btn-outline-secondary float-end", data: { turbo_frame: "checklist_entries" } %> <%= link_to "Abbrechen", checklist_entry.persisted? ? checklist_entry : checklist_entry.checklist, class: "btn btn-outline-secondary float-end", data: { turbo_frame: "checklist_entries" } %>
<%= form.submit class: "btn btn-secondary float-end me-2" %> <%= form.submit class: "btn btn-secondary float-end me-2" %>
<%= form.hidden_field :checklist_id %> <%= form.hidden_field :checklist_id %>
<%= form.collection_select :check_id, Check.all.order(:external_number), :id, :display_label %> <%= form.collection_select :check_id, Check.all.order(:external_number_1, :external_number_2, :external_number_3), :id, :display_label %>
<%# form.number_field :position %> <%# form.number_field :position %>
<% end %> <% end %>
</div> </div>

View file

@ -1,5 +0,0 @@
<%= bootstrap_form_with(model: checklist, data: { controller: "unsaved-changes" }) do |form| %>
<%= form.text_field :name %>
<%= form.rich_text_area :description_html, rows: 12 %>
<%= form.submit %>
<% end %>

View file

@ -1,5 +1,5 @@
= bootstrap_form_with(model: checklist, data: { controller: "unsaved-changes" }) do |form| = bootstrap_form_with(model: checklist, data: { controller: "unsaved-changes" }) do |form|
= form.text_field :name = form.text_field :name
= form.rich_text_area :description_html, rows: 12 = form.rich_text_area :description_html, rows: 12
= form.collection_check_boxes :check_ids, Check.all.order(:external_number), :id, :display_label = form.collection_check_boxes :check_ids, Check.all.order(:external_number_1, :external_number_2, :external_number_3), :id, :display_label
= form.submit = form.submit

View file

@ -18,8 +18,17 @@
.col-md-2 .col-md-2
= form.check_box d, label: t("applicability.#{d}").capitalize = form.check_box d, label: t("applicability.#{d}").capitalize
h2 Richtlinie h2 Erfolgskriterium
= form.text_field :external_number .d-flex.justify-content-start
div style="width:60px"
= form.number_field :external_number_1, hide_label: true
div.px-1.mt-3 style="" = "."
div style="width:60px"
= form.number_field :external_number_2, hide_label: true
div.px-1.mt-3 style="" = "."
div style="width:60px"
= form.number_field :external_number_3, hide_label: true
= form.text_field :external_url = form.text_field :external_url
= form.select :conformity_level, Check.conformity_levels.keys, include_blank: true = form.select :conformity_level, Check.conformity_levels.keys, include_blank: true
= multilang_form_field(form, :conformity_notice, as: :rich_text_area) = multilang_form_field(form, :conformity_notice, as: :rich_text_area)

View file

@ -1,4 +1,5 @@
<div id="<%= dom_id element %>" class="mb-5"> <div id="<%= dom_id element %>" class="mb-5">
<a id="<%= dom_id(element, :scroll) %>"></a>
<%= turbo_frame_tag dom_id(element, :frame) do %> <%= turbo_frame_tag dom_id(element, :frame) do %>
<div class="d-flex"> <div class="d-flex">
<h2 class="h4"> <h2 class="h4">

View file

@ -1,3 +1,3 @@
<%= link_to "#{tag.i(class: "bi bi-plus-lg")} Neue Checkliste".html_safe, new_from_checklist_element_success_criteria_path(element), class: "btn btn-primary" %> <%= link_to "#{tag.i(class: "bi bi-plus-lg")} Checkliste".html_safe, new_from_checklist_element_success_criteria_path(element), class: "btn btn-primary" %>
<%= link_to "#{tag.i(class: "bi bi-plus-lg")} Neues Erfolgskriterium".html_safe, new_element_success_criterion_path(element), class: "btn btn-primary" %> <%= link_to "#{tag.i(class: "bi bi-plus-lg")} Erfolgskriterium".html_safe, new_element_success_criterion_path(element), class: "btn btn-secondary" %>

View file

@ -1,2 +0,0 @@
<%= turbo_stream.update "new_element_frame", partial: "pages/new_element_button", locals: { page: @element.page } %>
<%= turbo_stream.append "element_list", @element %>

View file

@ -0,0 +1,5 @@
= turbo_stream.update "new_element_frame", partial: "pages/new_element_button", locals: { page: @element.page }
= turbo_stream.append "element_list", @element
= turbo_stream.append dom_id(@element.page, :page_nav_elements) do
i.bi.bi-boxes.me-1
= link_to("#{@element.number} #{@element.title}", "##{dom_id(@element)}", data: { "turbo": false })

View file

@ -5,33 +5,24 @@
<tr> <tr>
<th><%= Element.human_attribute_name(:id) %></th> <th><%= Element.human_attribute_name(:id) %></th>
<th><%= Element.human_attribute_name(:report_id) %></th> <th><%= Element.human_attribute_name(:page_id) %></th>
<th><%= Element.human_attribute_name(:path) %></th>
<th><%= Element.human_attribute_name(:title) %></th> <th><%= Element.human_attribute_name(:title) %></th>
<th><%= Element.human_attribute_name(:description_html) %></th>
</thead> </thead>
<tbody> <tbody>
<% @elements.each do |element| %> <% @elements.each do |element| %>
<tr> <tr>
<td><%= link_to(element.id, url_for(element)) %></td> <td><%= link_to(element.id, url_for(element)) %></td>
<td><%= link_to(element.report_id, url_for(element)) %></td> <td><%= link_to(element.page_id, url_for(element)) %></td>
<td><%= link_to(element.path, url_for(element)) %></td>
<td><%= link_to(element.title, url_for(element)) %></td> <td><%= link_to(element.title, url_for(element)) %></td>
<td><%= link_to(truncate(element.description_html&.to_plain_text), url_for(element)) %></td>
</tr> </tr>
<% end %> <% end %>
</tbody> </tbody>
</table> </table>
<div class="action-row"> <div class="action-row">
<%= link_to t("scaffold.link_new", model: Element.model_name.human), new_element_path %> <%= link_to t("scaffold.link_new", model: Element.model_name.human), new_page_element_path(@page) %>
</div> </div>

View file

@ -0,0 +1,30 @@
<!doctype html>
<html data-bs-theme="<%= cookies[:"modeTheme"] || "light" %>" data-controller="set-theme">
<head>
<title>a11ydive</title>
<meta name="viewport" content="width=device-width,initial-scale=1">
<%= csrf_meta_tags %>
<%= csp_meta_tag %>
<%= stylesheet_link_tag "application", "data-turbo-track": "reload" %>
<%= javascript_include_tag "application", "data-turbo-track": "reload", type: "module" %>
</head>
<body>
<%= render partial: "layouts/navigation" %>
<div class="container-fluid">
<div class="row">
<%= render partial: "layouts/sidebar" %>
<main class="col ps-md-2 pt-2 <%= "border-start" if sidebar? %>">
<div class="container-fluid">
<div id="main-content" data-controller="rich-text-link-targets">
<%= yield %>
</div>
</div>
</main>
</div>
</div>
<footer class="container-fluid mt-auto border-top"><%= Rails.configuration.build_version && "Version: #{Rails.configuration.build_version}" %>
</body>
</html>

View file

@ -13,7 +13,6 @@ html data-bs-theme="#{cookies[:"modeTheme"] || "light"}" data-controller="set-th
.row .row
= render partial: "layouts/sidebar" = render partial: "layouts/sidebar"
main.col.ps-md-2.pt-2 main.col.ps-md-2.pt-2
.container-fluid
#main-content[data-controller="rich-text-link-targets"] #main-content[data-controller="rich-text-link-targets"]
= yield = yield
footer.container-fluid.mt-auto.border-top footer.container-fluid.mt-auto.border-top

View file

@ -1,4 +1,4 @@
= bootstrap_form_with(model: [:report, page], data: { "turbo-frame": :nav }) do |form| = bootstrap_form_with(model: page.persisted? ? page : [:report, page], data: { "turbo-frame": :_top }) do |form|
= form.text_field :path = form.text_field :path
= form.text_field :url = form.text_field :url
= form.submit = form.submit

View file

@ -1,3 +1,4 @@
= bootstrap_form_with(model: page) do |form| .mt-5
= bootstrap_form_with(model: page) do |form|
= form.text_area :notes, rows: [(page.notes&.count("\n") || 0) + 1, 10].max, placeholder: "Hier kannst du Notizen speichern. \n\nJeder Pfad hat seine eigenen Notizen.", hide_label: true = form.text_area :notes, rows: [(page.notes&.count("\n") || 0) + 1, 10].max, placeholder: "Hier kannst du Notizen speichern. \n\nJeder Pfad hat seine eigenen Notizen.", hide_label: true
= form.submit "Speichern" = form.submit "Speichern"

View file

@ -1,6 +1,6 @@
<div id="<%= dom_id page %>" class="mb-3"> <div id="<%= dom_id page %>" class="mb-3">
<h2> <h2>
<i class="bi bi-file"></i> <i class="bi bi-file-earmark-check"></i>
<%= page.position %> <%= page.path %></h2> <%= page.position %> <%= page.path %></h2>
<p>url: <%= page.url %></p> <p>url: <%= page.url %></p>
<div id="element_list"> <div id="element_list">

View file

@ -1,8 +1,11 @@
h1 h1
= t("scaffold.pagetitle_show", model: @page.class.model_name.human) = t("scaffold.pagetitle_show", model: @page.class.model_name.human)
= render @page = render @page
= turbo_frame_tag(dom_id(@page, :notes)) do = turbo_frame_tag(dom_id(@page, :notes)) do
= render partial: "pages/notes", locals: { page: @page } = render partial: "pages/notes", locals: { page: @page }
.action-row .action-row
= link_to t("scaffold.link_edit", model: @page.model_name.human), edit_page_path(@page) = link_to t("scaffold.link_edit", model: @page.model_name.human), edit_page_path(@page)
= link_to t("scaffold.link_index", model: @page.model_name.human(count: 2)), report_pages_path(@page.report) = link_to t("scaffold.link_index", model: @page.model_name.human(count: 2)), report_pages_path(@page.report)

View file

@ -1 +1 @@
<%= link_to "#{tag.i(class: "bi bi-plus-lg")} Neuer Pfad".html_safe, new_report_page_path(report), class: "btn btn-primary mb-3" %> <%= link_to "#{tag.i(class: "bi bi-plus-lg")}".html_safe, new_report_page_path(report), class: "btn btn-primary" %>

View file

@ -0,0 +1,26 @@
div id=dom_id(report, :page_nav)
- if report.pages.any?
details open=true
summary Struktur
nav
ul
- report.pages.each do |page|
- is_current = current_page == page
li
details open=current_page_displayed(page) class=""
summary
i.bi.me-1 class="bi-file-earmark-check#{is_current ? "-fill" : "" }"
- if is_current
=< "#{page.position} #{page.path}"
- else
=< link_to("#{page.position} #{page.path}", report_path(report, page_id: page.id), class: "#{is_current ? " active text-decoration-underline" : nil }", data: { "turbo-frame": :_top })
ul id=dom_id(page, :page_nav_elements)
- page.elements.each do |element|
li
i.bi.bi-boxes.me-1
- if current_page == page
=< link_to("#{element.number} #{element.title}", "##{dom_id(element)}", data: { "turbo": false })
- else
=< link_to("#{element.number} #{element.title}", report_path(report, page_id: page.id, anchor: dom_id(element)), data: { "turbo": false })
= turbo_frame_tag "new_page_frame" do
= render partial: "reports/new_page_button", locals: { report: report }

View file

@ -1,4 +1,5 @@
small.float-end div
small.float-end
| Erstellt am | Erstellt am
= l(@report.created_at, format: :short) = l(@report.created_at, format: :short)
| , zuletzt bearbeitet am | , zuletzt bearbeitet am
@ -9,17 +10,10 @@ h1
- if @report.comment - if @report.comment
.smb-4.lead.mb-3 .smb-4.lead.mb-3
= @report.comment = @report.comment
= turbo_frame_tag "nav" do .row
.row
.col-lg-3.col-md-6.col-sm-12 .col-lg-3.col-md-6.col-sm-12
nav.nav.nav-pills.flex-column.mb-3#page_list .page_nav.sticky-top
- @report.pages.each do |page| = render partial: "reports/page_nav", locals: { report: @report, current_page: @current_page }
/= link_to(report_path(@report, page_id: page.id), class: "nav-link#{@current_page&.id == page.id ? " active" : nil }", data: { "turbo-action": :advance }) do
i.bi.bi-file
=< "#{page.position} #{page.path}"
= link_to(page.path, report_path(@report, page_id: page.id), class: "nav-link#{@current_page&.id == page.id ? " active" : nil }", data: { "turbo-action": :advance })
= turbo_frame_tag "new_page_frame" do
= render partial: "reports/new_page_button", locals: { report: @report }
- if @current_page - if @current_page
= turbo_frame_tag(dom_id(@current_page, :notes)) do = turbo_frame_tag(dom_id(@current_page, :notes)) do
= render partial: "pages/notes", locals: { page: @current_page } = render partial: "pages/notes", locals: { page: @current_page }

View file

@ -4,7 +4,7 @@
<div class="collapse show" id="collapseSuccessCriterion_<%= success_criterion.id %>"> <div class="collapse show" id="collapseSuccessCriterion_<%= success_criterion.id %>">
<div class="card-body"> <div class="card-body">
<%= bootstrap_form_with(model: success_criterion.persisted? ? success_criterion : [:element, success_criterion]) do |form| %> <%= bootstrap_form_with(model: success_criterion.persisted? ? success_criterion : [:element, success_criterion], data: { controller: "unsaved-changes" }) do |form| %>
<div class="row"> <div class="row">
<div class="col"> <div class="col">
<div class="btn-group" role="group" aria-label="Resultat"> <div class="btn-group" role="group" aria-label="Resultat">

View file

@ -3,7 +3,7 @@ h1
= turbo_frame_tag dom_id(@success_criterion.element, "new_success_criterion_frame") do = turbo_frame_tag dom_id(@success_criterion.element, "new_success_criterion_frame") do
.border.border-info.p-3 .border.border-info.p-3
= bootstrap_form_with(model: @success_criterion.persisted? ? @success_criterion : [:element, @success_criterion]) do |form| = bootstrap_form_with(model: @success_criterion.persisted? ? @success_criterion : [:element, @success_criterion]) do |form|
= form.collection_select :check_id, Check.all.order(:external_number), :id, :display_label = form.collection_select :check_id, Check.all.order(:external_number_1, :external_number_2, :external_number_3), :id, :display_label
= form.submit class: "btn btn-warning" = form.submit class: "btn btn-warning"
= link_to "Abbrechen", @success_criterion.persisted? ? @success_criterion : @success_criterion.element, class: "btn btn-outline-secondary" = link_to "Abbrechen", @success_criterion.persisted? ? @success_criterion : @success_criterion.element, class: "btn btn-outline-secondary"

View file

@ -73,7 +73,15 @@ de-CH:
name: Bezeichnung name: Bezeichnung
comment: Projektbeschreibung comment: Projektbeschreibung
page: page:
path: Name
url: Url
notes: Notizen notes: Notizen
success_criterion:
test_comment: Testkommentar
quick_criterion: Quick Kriterium
quick_fail: Quick Fail
quick_fix: Quick Fix
title: Titel
models: models:
account: account:
one: Konto one: Konto
@ -108,3 +116,6 @@ de-CH:
principle: principle:
one: Prinzip (WCAG) one: Prinzip (WCAG)
other: Prinzipien (WCAG) other: Prinzipien (WCAG)
page:
one: Pfad
other: Pfade

View file

@ -0,0 +1,33 @@
class AddExternalNumbersFieldToChecks < ActiveRecord::Migration[7.2]
def change
reversible do |dir|
dir.down do
add_column :checks, :external_number, :integer
execute <<~SQL
UPDATE checks SET
external_number = printf('%d.%d.%d', external_number_1, external_number_2, external_number_3)
SQL
remove_column :checks, :external_number_1, :integer
remove_column :checks, :external_number_2, :integer
remove_column :checks, :external_number_3, :integer
end
end
reversible do |dir|
dir.up do
add_column :checks, :external_number_1, :integer
add_column :checks, :external_number_2, :integer
add_column :checks, :external_number_3, :integer
execute <<~SQL
UPDATE checks SET
external_number_1 = CAST(SUBSTRING(external_number, 1, INSTR(external_number, '.') - 1) AS integer),
external_number_2 = CAST(SUBSTRING(SUBSTRING(external_number, INSTR(external_number, '.') + 1), 1, INSTR(SUBSTRING(external_number, INSTR(external_number, '.') + 1), '.') - 1) AS integer),
external_number_3 = CAST(SUBSTRING(SUBSTRING(external_number, INSTR(external_number, '.') + 1), INSTR(SUBSTRING(external_number, INSTR(external_number, '.') + 1), '.') + 1) AS integer)
SQL
remove_column :checks, :external_number
end
end
end
end

6
db/schema.rb generated
View file

@ -10,7 +10,7 @@
# #
# It's strongly recommended that you check this file into your version control system. # It's strongly recommended that you check this file into your version control system.
ActiveRecord::Schema[7.2].define(version: 2024_11_01_015725) do ActiveRecord::Schema[7.2].define(version: 2024_11_01_125547) do
create_table "account_remember_keys", force: :cascade do |t| create_table "account_remember_keys", force: :cascade do |t|
t.string "key", null: false t.string "key", null: false
t.datetime "deadline", null: false t.datetime "deadline", null: false
@ -95,7 +95,6 @@ ActiveRecord::Schema[7.2].define(version: 2024_11_01_015725) do
t.boolean "applicable_to_web", default: false, null: false t.boolean "applicable_to_web", default: false, null: false
t.boolean "applicable_to_app", default: false, null: false t.boolean "applicable_to_app", default: false, null: false
t.integer "principle_id" t.integer "principle_id"
t.string "external_number"
t.integer "conformity_level" t.integer "conformity_level"
t.integer "priority" t.integer "priority"
t.boolean "manual_test", default: true, null: false t.boolean "manual_test", default: true, null: false
@ -104,6 +103,9 @@ ActiveRecord::Schema[7.2].define(version: 2024_11_01_015725) do
t.boolean "applicable_to_analogue", default: false, null: false t.boolean "applicable_to_analogue", default: false, null: false
t.boolean "applicable_to_document", default: false, null: false t.boolean "applicable_to_document", default: false, null: false
t.boolean "applicable_to_non_web", default: false, null: false t.boolean "applicable_to_non_web", default: false, null: false
t.integer "external_number_1"
t.integer "external_number_2"
t.integer "external_number_3"
t.index ["number"], name: "index_checks_on_number", unique: true t.index ["number"], name: "index_checks_on_number", unique: true
t.index ["principle_id"], name: "index_checks_on_principle_id" t.index ["principle_id"], name: "index_checks_on_principle_id"
end end

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -25,20 +25,19 @@ class ElementsControllerTest < ActionDispatch::IntegrationTest
end end
test "should get index" do test "should get index" do
get elements_url get page_elements_url(@element.page)
assert_response :success assert_response :success
end end
test "should get new" do test "should get new" do
get new_element_url get new_page_element_url(@element.page)
assert_response :success assert_response :success
end end
test "should create element" do test "should create element" do
assert_difference("Element.count") do assert_difference("Element.count") do
post elements_url, post page_elements_url(@element.page),
params: { element: { description_html: @element.description_html, path: @element.path, report_id: @element.report_id, params: { element: { description: @element.description, title: @element.title, checklist_id: @checklist.id } }
title: @element.title, checklist_id: @checklist.id } }
end end
assert_redirected_to report_url(Element.last.report) assert_redirected_to report_url(Element.last.report)
@ -56,7 +55,7 @@ class ElementsControllerTest < ActionDispatch::IntegrationTest
test "should update element" do test "should update element" do
patch element_url(@element), patch element_url(@element),
params: { element: { description_html: @element.description_html, path: @element.path, report_id: @element.report_id, params: { element: { description: @element.description, page_id: @element.page_id,
title: @element.title } } title: @element.title } }
assert_redirected_to element_url(@element) assert_redirected_to element_url(@element)
end end
@ -66,6 +65,6 @@ class ElementsControllerTest < ActionDispatch::IntegrationTest
delete element_url(@element) delete element_url(@element)
end end
assert_redirected_to elements_url assert_redirected_to page_elements_url(@element.page)
end end
end end

View file

@ -1,26 +1,42 @@
require "test_helper" require "test_helper"
class PagesControllerTest < ActionDispatch::IntegrationTest class PagesControllerTest < ActionDispatch::IntegrationTest
def login(email, password)
post "/login", params: { email: email, password: password }
assert_redirected_to "/"
end
def logout
post "/logout"
assert_redirected_to "/"
end
teardown do
logout
end
setup do setup do
Account.create(email: "test@example.com", password: "password")
@page = pages(:one) @page = pages(:one)
login("test@example.com", "password")
end end
test "should get index" do test "should get index" do
get pages_url get report_pages_url(@page.report)
assert_response :success assert_response :success
end end
test "should get new" do test "should get new" do
get new_page_url get new_report_page_url(@page.report)
assert_response :success assert_response :success
end end
test "should create page" do test "should create page" do
assert_difference("Page.count") do assert_difference("Page.count") do
post pages_url, params: { page: { path: @page.path, position: @page.position, report_id: @page.report_id, url: @page.url } } post report_pages_url(@page.report), params: { page: { path: @page.path, position: @page.position + 1, url: @page.url } }
end end
assert_redirected_to page_url(Page.last) assert_redirected_to report_url(Page.last.report, page_id: Page.last)
end end
test "should show page" do test "should show page" do
@ -40,9 +56,10 @@ class PagesControllerTest < ActionDispatch::IntegrationTest
test "should destroy page" do test "should destroy page" do
assert_difference("Page.count", -1) do assert_difference("Page.count", -1) do
Rails.logger.level = :debug
delete page_url(@page) delete page_url(@page)
end end
assert_redirected_to pages_url assert_redirected_to report_pages_url(@page.report)
end end
end end

View file

@ -24,20 +24,19 @@ class SuccessCriteriaControllerTest < ActionDispatch::IntegrationTest
end end
test "should get index" do test "should get index" do
get success_criteria_url get element_success_criteria_url(@success_criterion.element)
assert_response :success assert_response :success
end end
test "should get new" do test "should get new" do
get new_success_criterion_url get new_element_success_criterion_url(@success_criterion.element)
assert_response :success assert_response :success
end end
test "should create success_criterion" do test "should create success_criterion" do
assert_difference("SuccessCriterion.count") do assert_difference("SuccessCriterion.count") do
post success_criteria_url, post element_success_criteria_url(@success_criterion.element),
params: { success_criterion: { comment: @success_criterion.comment, params: { success_criterion: { check_id: @success_criterion.check_id } }
description_html: @success_criterion.description_html, element_id: @success_criterion.element_id, level: @success_criterion.level, result: @success_criterion.result, title: @success_criterion.title } }
end end
assert_redirected_to success_criterion_url(SuccessCriterion.last) assert_redirected_to success_criterion_url(SuccessCriterion.last)
@ -55,8 +54,7 @@ class SuccessCriteriaControllerTest < ActionDispatch::IntegrationTest
test "should update success_criterion" do test "should update success_criterion" do
patch success_criterion_url(@success_criterion), patch success_criterion_url(@success_criterion),
params: { success_criterion: { comment: @success_criterion.comment, params: { success_criterion: { test_comment: @success_criterion.test_comment, level: @success_criterion.level, result: @success_criterion.result, title: @success_criterion.title } }
description_html: @success_criterion.description_html, element_id: @success_criterion.element_id, level: @success_criterion.level, result: @success_criterion.result, title: @success_criterion.title } }
assert_redirected_to success_criterion_url(@success_criterion) assert_redirected_to success_criterion_url(@success_criterion)
end end
@ -65,6 +63,6 @@ class SuccessCriteriaControllerTest < ActionDispatch::IntegrationTest
delete success_criterion_url(@success_criterion) delete success_criterion_url(@success_criterion)
end end
assert_redirected_to success_criteria_url assert_redirected_to element_success_criteria_url(@success_criterion.element)
end end
end end

View file

@ -2,18 +2,21 @@
one: one:
position: MyString position: MyString
name: MyString name_de: MyString
level: 1 level: 1
number: 1 number: 1
principle: one
two: two:
position: MyString position: MyString
name: MyString name_de: MyString
level: 1 level: 1
number: 2 number: 2
principle: one
deletable: deletable:
position: MyString position: MyString
name: MyString name_de: MyString
level: 1 level: 1
number: 3 number: 3
principle: one

View file

@ -1,13 +1,11 @@
# Read about fixtures at https://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html # Read about fixtures at https://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html
one: one:
report: one page: one
path: MyString
title: MyString title: MyString
# description: MyText position: 1
two: two:
report: two page: two
path: MyString
title: MyString title: MyString
# description: MyText position: 2

View file

@ -5,9 +5,13 @@ one:
title: MyString title: MyString
level: 1 level: 1
result: 1 result: 1
position: 1
check: one
two: two:
element: two element: two
title: MyString title: MyString
level: 1 level: 1
result: 1 result: 1
position: 2
check: two

View file

@ -13,13 +13,13 @@ class ElementsTest < ApplicationSystemTestCase
end end
test "visiting the index" do test "visiting the index" do
visit elements_url visit page_elements_url(@element.page)
assert_selector "h1", text: "Elemente" assert_selector "h1", text: "Elemente"
end end
test "should create element" do test "should create element" do
skip skip
visit elements_url visit page_elements_url(@element.page)
click_on "Element hinzufügen" click_on "Element hinzufügen"
assert_difference("Element.count", 1) do assert_difference("Element.count", 1) do
@ -35,9 +35,6 @@ class ElementsTest < ApplicationSystemTestCase
test "should update Element" do test "should update Element" do
visit element_url(@element) visit element_url(@element)
click_on "Element bearbeiten", match: :first click_on "Element bearbeiten", match: :first
fill_in_rich_text_area "Details", with: @element.description_html
fill_in "Pfad", with: @element.path
fill_in "Beschreibung", with: @element.title fill_in "Beschreibung", with: @element.title
click_on "Element aktualisieren" click_on "Element aktualisieren"
end end

View file

@ -3,45 +3,43 @@ require "application_system_test_case"
class PagesTest < ApplicationSystemTestCase class PagesTest < ApplicationSystemTestCase
setup do setup do
@page = pages(:one) @page = pages(:one)
login_test
end
teardown do
logout
end end
test "visiting the index" do test "visiting the index" do
visit pages_url visit report_pages_url(@page.report)
assert_selector "h1", text: "Pages" assert_selector "h1", text: "Pfade"
end end
test "should create page" do test "should create page" do
visit pages_url visit report_pages_url(@page.report)
click_on "New page" click_on "Pfad hinzufügen"
fill_in "Path", with: @page.path fill_in "Name", with: @page.path
fill_in "Position", with: @page.position
fill_in "Report", with: @page.report_id
fill_in "Url", with: @page.url fill_in "Url", with: @page.url
click_on "Create Page" click_on "Pfad erstellen"
assert_text "Page was successfully created" assert_text "Prüfbericht bearbeiten"
click_on "Back"
end end
test "should update Page" do test "should update Page" do
visit page_url(@page) visit page_url(@page)
click_on "Edit this page", match: :first click_on "Pfad bearbeiten", match: :first
fill_in "Path", with: @page.path fill_in "Name", with: @page.path
fill_in "Position", with: @page.position
fill_in "Report", with: @page.report_id
fill_in "Url", with: @page.url fill_in "Url", with: @page.url
click_on "Update Page" click_on "Pfad aktualisieren"
assert_text "Page was successfully updated"
click_on "Back"
end end
test "should destroy Page" do test "should destroy Page" do
visit page_url(@page) visit page_url(@page)
click_on "Destroy this page", match: :first click_on "Pfad löschen", match: :first
assert_text "Page was successfully destroyed" assert_text "Pfad hinzufügen"
assert(Page.exists?(@page.id) == false)
end end
end end

View file

@ -38,7 +38,7 @@ class ReportsTest < ApplicationSystemTestCase
test "should destroy Report" do test "should destroy Report" do
visit report_url(@report) visit report_url(@report)
click_on "Prüfbericht löschen", match: :first click_on "Prüfbericht löschen", match: :first
assert_text("Report was successfully destroyed") assert_text("Prüfberichte")
assert(Report.exists?(@report.id) == false) assert(Report.exists?(@report.id) == false)
end end
end end

View file

@ -8,21 +8,27 @@ class SuccessCriteriaTest < ApplicationSystemTestCase
end end
setup do setup do
@check = checks(:one)
@check.update!(name_de: "Testcheck")
@success_criterion = success_criteria(:one) @success_criterion = success_criteria(:one)
@success_criterion.check = @check
@success_criterion.save!
login_test login_test
end end
test "visiting the index" do test "visiting the index" do
visit success_criteria_url visit element_success_criteria_url(@success_criterion.element)
assert_selector "h1", text: "Erfolgskriterien" assert_selector "h1", text: "Erfolgskriterien"
end end
test "should create Erfolgskriterium" do test "should create Erfolgskriterium" do
visit success_criteria_url visit element_success_criteria_url(@success_criterion.element)
click_on "Erfolgskriterium hinzufügen" click_on "Erfolgskriterium hinzufügen"
fill_in_rich_text_area "Testkommentar", with: @success_criterion.comment select @check.name_de, from: "Check"
fill_in_rich_text_area "Richtlinie", with: @success_criterion.description_html
# fill_in_rich_text_area "Testkommentar", with: @success_criterion.test_comment
# fill_in_rich_text_area "Quick Kriterium", with: @success_criterion.quick_criterion
# fill_in 'Element', with: @success_criterion.element_id # fill_in 'Element', with: @success_criterion.element_id
# fill_in 'Level', with: @success_criterion.level # fill_in 'Level', with: @success_criterion.level
# fill_in 'Result', with: @success_criterion.result # fill_in 'Result', with: @success_criterion.result
@ -34,8 +40,8 @@ class SuccessCriteriaTest < ApplicationSystemTestCase
visit success_criterion_url(@success_criterion) visit success_criterion_url(@success_criterion)
click_on "Erfolgskriterium bearbeiten", match: :first click_on "Erfolgskriterium bearbeiten", match: :first
fill_in_rich_text_area "Testkommentar", with: @success_criterion.comment fill_in_rich_text_area "Testkommentar", with: @success_criterion.test_comment
fill_in_rich_text_area "Richtlinie", with: @success_criterion.description_html fill_in_rich_text_area "Quick Kriterium", with: @success_criterion.quick_criterion
find("label", text: "Bestanden", visible: true).click find("label", text: "Bestanden", visible: true).click
fill_in "Titel", with: "new" fill_in "Titel", with: "new"
click_on "Erfolgskriterium aktualisieren" click_on "Erfolgskriterium aktualisieren"