From c618b27f3e2bf18d3435bbc7f1bce5dfc1923b59 Mon Sep 17 00:00:00 2001 From: blacksmith-welder Date: Thu, 23 Jan 2025 15:48:58 +0200 Subject: [PATCH] Digital object rapid data entry --- .../digital_object_rapid_data_entry.feature | 1 + .../digital_object_rapid_data_entry.rb | 148 ++++++++++++++++++ 2 files changed, 149 insertions(+) create mode 100644 staff_features/digital_objects/step_definitions/digital_object_rapid_data_entry.rb diff --git a/staff_features/digital_objects/digital_object_rapid_data_entry.feature b/staff_features/digital_objects/digital_object_rapid_data_entry.feature index 8f7016f..bbd5169 100644 --- a/staff_features/digital_objects/digital_object_rapid_data_entry.feature +++ b/staff_features/digital_objects/digital_object_rapid_data_entry.feature @@ -12,6 +12,7 @@ Feature: Digital Object Rapid Data Entry Scenario: Validate row succeeds When the user clicks on 'Rapid Data Entry' And the user fills in 'Title' with 'Default Test Title' in the first row of the Rapid Data Entry table + And the user clicks on 'Validate Rows' in the modal Then the following message is displayed | All rows are valid | Scenario: Validate row fails diff --git a/staff_features/digital_objects/step_definitions/digital_object_rapid_data_entry.rb b/staff_features/digital_objects/step_definitions/digital_object_rapid_data_entry.rb new file mode 100644 index 0000000..563d7f7 --- /dev/null +++ b/staff_features/digital_objects/step_definitions/digital_object_rapid_data_entry.rb @@ -0,0 +1,148 @@ +# frozen_string_literal: true + +When 'the user selects {string} from {string} in the first row of the Rapid Data Entry table' do |option, label| + table_header_cells = all('.fieldset-labels .kiketable-th-text') + + label_position = 0 + table_header_cells.each_with_index do |header, index| + label_position = index if header.text == label + end + + label_position += 1 + expect(label_position).to_not eq 0 + + table_field_cells = all('#rdeTable tbody td') + field_cell = table_field_cells[label_position] + field_cell_select = field_cell.find('select') + field_cell_select.select option +end + +When 'the user fills in {string} with {string} in the first row of the Rapid Data Entry table' do |label, value| + table_header_cells = all('.fieldset-labels .kiketable-th-text') + + label_position = 0 + table_header_cells.each_with_index do |header, index| + label_position = index if header.text == label + end + + label_position += 1 + expect(label_position).to_not eq 0 + + table_field_cells = all('#rdeTable tbody td') + field_cell = table_field_cells[label_position] + field_cell_input = field_cell.find('input') + field_cell_input.fill_in with: value +end + +Then 'a new row with the following data is added to the Rapid Data Entry table' do |form_values_table| + table_header_cells = all('.fieldset-labels .kiketable-th-text') + table_field_rows = all('#rdeTable tbody tr') + + expect(table_field_rows.length).to eq 2 + + form_values_hash = form_values_table.rows_hash + form_values_hash.each do |field, value| + field_position = 0 + table_header_cells.each_with_index do |header, index| + field_position = index if header.text == field + end + field_position += 1 + expect(field_position).to_not eq 0 + + table_field_cells = table_field_rows[1].all('td') + field_cell = table_field_cells[field_position] + + expect(field_cell.find('input, select, textarea').value.downcase.gsub(' ', '_')).to eq value.downcase.gsub(' ', '_') + end +end + +Then 'a new template with name {string} with the following data is added to the Rapid Data Entry templates' do |template, form_values_table| + visit "#{STAFF_URL}/digital_objects/#{@digital_object_id}/edit" + click_on 'Rapid Data Entry' + wait_for_ajax + + click_on 'Apply an RDE Template' + find('a span', text: template, match: :first).click + + table_header_cells = all('.fieldset-labels .kiketable-th-text') + table_field_rows = all('#rdeTable tbody tr') + + expect(table_field_rows.length).to eq 1 + + form_values_hash = form_values_table.rows_hash + form_values_hash.each do |field, value| + field_position = 0 + table_header_cells.each_with_index do |header, index| + field_position = index if header.text == field + end + field_position += 1 + expect(field_position).to_not eq 0 + + table_field_cells = table_field_rows[0].all('td') + field_cell = table_field_cells[field_position] + + expect(field_cell.find('input, select, textarea').value.downcase.gsub(' ', '_')).to eq value.downcase.gsub(' ', '_') + end +end + +Given 'a Radpid Data Entry template has been created' do + visit "#{STAFF_URL}/digital_objects/#{@digital_object_id}/edit" + click_on 'Rapid Data Entry' + wait_for_ajax + + click_on 'Save as Template' + fill_in 'templateName', with: "RDE Template #{@uuid}" + click_on 'Save Template' + + visit "#{STAFF_URL}/digital_objects/#{@digital_object_id}/edit" + wait_for_ajax +end + +When 'the user checks the created Rapid Data Entry template' do + find('label', text: "RDE Template #{@uuid}").click +end + +Then 'the template is removed from the Rapid Data Entry templates' do + visit "#{STAFF_URL}/digital_objects/#{@digital_object_id}/edit" + click_on 'Rapid Data Entry' + wait_for_ajax + click_on 'Apply an RDE Template' + + expect(find('.dropdown-menu')).to_not have_text "RDE Template #{@uuid}" +end + +When 'the user unchecks the {string} checkbox in the dropdown menu' do |label| + uncheck label +end + +Then 'the {string} column is no longer visible in the Rapid Data Entry table' do |string| + expect(page).to_not have_css('.fieldset-label.sticky.kiketable-th', text: string) +end + +Then 'the {string} has value {string} in all rows' do |label, value| + table_header_cells = all('.fieldset-labels .kiketable-th-text') + + label_position = 0 + table_header_cells.each_with_index do |header, index| + next if header.text != label + + label_position = index + break + end + + label_position += 1 + expect(label_position).to_not eq 0 + + table_rows = all('#rdeTable tbody tr') + table_rows.each do |row| + cell = row.all('td') + expect(cell[label_position].find('input').value.downcase).to eq value.downcase + end +end + +Given 'a Rapid Data Entry template has been created' do + click_on 'Rapid Data Entry' + click_on 'Save as Template' + fill_in 'Template name', with: "RDE Template #{@uuid}" + click_on 'Save Template' +end