diff --git a/Gemfile b/Gemfile index ea0567c5..2fd214c9 100644 --- a/Gemfile +++ b/Gemfile @@ -31,7 +31,8 @@ gem 'jbuilder', '~> 2.5' gem 'rails-controller-testing' # Use rubocop for static code analysis gem 'rubocop' - +# bundler audit +gem 'rexml', '>= 3.2.7' gem 'rubocop-rails', require: false gem 'rubocop-rspec', require: false diff --git a/Gemfile.lock b/Gemfile.lock index fc165729..1c6744ad 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -261,7 +261,8 @@ GEM responders (3.1.1) actionpack (>= 5.2) railties (>= 5.2) - rexml (3.2.6) + rexml (3.2.8) + strscan (>= 3.0.9) rspec-core (3.13.0) rspec-support (~> 3.13.0) rspec-expectations (3.13.0) @@ -364,6 +365,7 @@ GEM net-scp (>= 1.1.2) net-sftp (>= 2.1.2) net-ssh (>= 2.8.0) + strscan (3.1.0) thor (1.3.1) tilt (2.3.0) timeout (0.4.1) @@ -430,6 +432,7 @@ DEPENDENCIES rails-controller-testing rb-readline recaptcha + rexml (>= 3.2.7) rspec-rails (~> 4.1.0) rspec_junit_formatter rubocop diff --git a/app/assets/stylesheets/software_records.scss b/app/assets/stylesheets/software_records.scss index fae872f4..04ae53cd 100644 --- a/app/assets/stylesheets/software_records.scss +++ b/app/assets/stylesheets/software_records.scss @@ -239,7 +239,7 @@ option { } .table td, .table th { - vertical-align: middle !important; + vertical-align: top !important; border-top: none; } diff --git a/app/controllers/software_records_controller.rb b/app/controllers/software_records_controller.rb index 034e63bd..ee95d904 100644 --- a/app/controllers/software_records_controller.rb +++ b/app/controllers/software_records_controller.rb @@ -9,8 +9,11 @@ class SoftwareRecordsController < ApplicationController before_action :authenticate_user!, except: %i[new create show] before_action :set_software_record, only: %i[show edit update destroy] before_action :navigation, except: %i[edit update] - access all: %i[create show], viewer: %i[index show], owner: %i[index show edit update list_upgrades], - manager: %i[index show edit update new create destroy list_upgrades], root_admin: :all, message: 'Permission Denied !
Please contact the administrator for more info.' + access all: %i[create show], viewer: %i[index show], owner: %i[index show edit update list_upgrades list_road_map edit_road_map update_road_map], + manager: %i[index show edit update new create destroy list_upgrades list_road_map edit_road_map update_road_map], root_admin: :all, message: 'Permission Denied !
Please +contact the administrator for more +info.' + # GET /software_records def index @@ -171,8 +174,42 @@ def list_upgrades @softwarerecords_count = SoftwareRecord.count end + def list_road_map + $page_title = 'Road Map | UCL Application Portfolio' + @params = request.query_parameters + + @software_records = if @params['filter_by'].to_s == 'software_types' && !@params['software_type_filter'].nil? && !@params['software_type_filter'].empty? + SoftwareRecord.where(software_type_id: @params['software_type_filter']).order("#{sort_priority} #{sort_direction_priority}") + elsif @params['filter_by'].to_s == 'vendor_records' && !@params['vendor_record_filter'].nil? && + !@params['vendor_record_filter'].empty? + SoftwareRecord.where(vendor_record_id: @params['vendor_record_filter']).order("#{sort_priority} #{sort_direction_priority}") + else + SoftwareRecord.order("#{sort_column} #{sort_direction}") + end + @vendor_records = VendorRecord.all + @software_types = SoftwareType.all + @softwarerecords_count = SoftwareRecord.count + end + + def edit_road_map + @software_record = SoftwareRecord.find(params[:id]) + end + + def update_road_map + @software_record = SoftwareRecord.find(params[:id]) + if @software_record.update(road_map_params) + redirect_to list_road_map_path, notice: 'Road map was successfully updated.' + else + render :edit_road_map + end + end + private + def road_map_params + params.require(:software_record).permit(:road_map) + end + # Use callbacks to share common setup or constraints between actions. def set_software_record @software_record = SoftwareRecord.find(params[:id]) @@ -239,6 +276,7 @@ def software_record_params :installed_version, :latest_version, :proposed_version, + :road_map, :last_upgrade_date, :upgrade_available, :vulnerabilities_reported, diff --git a/app/views/shared/_dashboard_menu.html.erb b/app/views/shared/_dashboard_menu.html.erb index 6f056b5f..46124fe7 100644 --- a/app/views/shared/_dashboard_menu.html.erb +++ b/app/views/shared/_dashboard_menu.html.erb @@ -20,6 +20,7 @@ View all Change Requests
Next Software Upgrades + Road Map List Manage all Users Import Data
@@ -47,6 +48,7 @@ View all Hosting Environments
Next Software Upgrades + Road Map List View all Change Requests
@@ -64,6 +66,7 @@ View all Change Request
Next Software Upgrades + Road Map List
Export Software Records Export Software Types diff --git a/app/views/software_records/_form_general.html.erb b/app/views/software_records/_form_general.html.erb index ac504d8f..d4a2f793 100644 --- a/app/views/software_records/_form_general.html.erb +++ b/app/views/software_records/_form_general.html.erb @@ -411,6 +411,13 @@ <% end %> + <% if current_user.role.to_s == "root_admin" or current_user.role.to_s == "manager" or current_user.role.to_s == "technician"%> +
+ <%= form.label :road_map, 'Road Map' %> + <%= form.text_area :road_map, :cols => 30, :rows => 7, :class => "form-control" %> +
+ <% end %> +
<%= form.label :notes %> <%= form.text_area :notes, :cols => 30, :rows => 3, :class => "form-control" %> diff --git a/app/views/software_records/_general.html.erb b/app/views/software_records/_general.html.erb index 7d837537..0d084527 100644 --- a/app/views/software_records/_general.html.erb +++ b/app/views/software_records/_general.html.erb @@ -148,6 +148,13 @@ <% end %> <% end %> + <% if !@software_record.road_map.nil? && !@software_record.road_map.to_s.empty? %> +
Road Map
+
+ +
+ <% end %> + <% if !@software_record.notes.nil? && !@software_record.notes.to_s.empty? %>
Notes
diff --git a/app/views/software_records/edit_road_map.html.erb b/app/views/software_records/edit_road_map.html.erb new file mode 100644 index 00000000..28374d32 --- /dev/null +++ b/app/views/software_records/edit_road_map.html.erb @@ -0,0 +1,38 @@ +
+
+
+ +

Edit Road Map

+ + <%= form_with(model: @software_record, url: update_road_map_software_record_path(@software_record), local: true, class: 'mt-4') do |form| %> + <% if @software_record.errors.any? %> +
+

<%= pluralize(@software_record.errors.count, "error") %> prohibited this road map from being saved:

+
    + <% @software_record.errors.full_messages.each do |message| %> +
  • <%= message %>
  • + <% end %> +
+
+ <% end %> + + <% if !@software_record.title.nil? && !@software_record.title.to_s.empty? %> +
+ <%= form.label :title, class: 'form-label' %> +

<%= @software_record.title %>

+
+ <% end %> + +
+ <%= form.label :road_map, class: 'form-label' %> + <%= form.text_area :road_map, class: 'form-control', rows: 10 %> +
+ +
+ <%= form.submit 'Update', class: 'btn btn-primary' %> + <%= link_to 'Back', software_records_path, class: 'btn btn-secondary ml-2' %> +
+ <% end %> +
+
+ diff --git a/app/views/software_records/list_road_map.html.erb b/app/views/software_records/list_road_map.html.erb new file mode 100644 index 00000000..3ab3f77f --- /dev/null +++ b/app/views/software_records/list_road_map.html.erb @@ -0,0 +1,65 @@ +
+
+
+
+

Road Map List

+ Collection of all the software application and their road maps.

+
+
+
+
+ +<% if @softwarerecords_count != 0 %> +
+
+ + + + + + + + <% if current_user.role.to_s == "viewer" %> + + <% elsif current_user.role.to_s == "owner" %> + + <% else %> + + <% end %> + + + + + <% @software_records.each do |software_record| %> + + + + <% if current_user.role.to_s == "viewer" %> + + <% elsif current_user.role.to_s == "owner" %> + + <% else %> + + + <% end %> + + <% end %> + +
<%= sortable "title", "Title" %> + <% if params[:direction] == "asc" || params[:direction] == nil %> + + <% else %> + + <% end %><%= sortable "road_map", "Road Map" %> + <% if params[:direction] == "asc" || params[:direction] == nil %> + + <% else %> + + <% end %>ActionsActionsActions
<%= software_record.title %><%= simple_format(software_record.road_map) %><%= link_to 'View', software_record , { :class => "btn btn-success action-btn" }%><%= link_to 'Edit Road Map', edit_road_map_software_record_path(software_record), class: "btn btn-primary action-btn", style: +"white-space: nowrap;" %><%= link_to 'Edit Road Map', edit_road_map_software_record_path(software_record), class: "btn btn-primary action-btn", style: +"white-space: nowrap;" %>
+
+
+<% else %> +

No records found

+<% end %> diff --git a/config/routes.rb b/config/routes.rb index ef0de775..7d476917 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -15,6 +15,16 @@ # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html root 'front#index' get 'list_upgrades' => 'software_records#list_upgrades' + get 'list_road_map' => 'software_records#list_road_map' + resources :software_records do + member do + get 'edit_road_map' + patch 'update_road_map' + end + end + + # get 'software_records/:id/edit_roadmap', to: 'software_records#edit_road_map', as: 'edit_road_map_software_record' + get 'edit_road_map_software_records' => 'software_records#list_road_map' get 'about', to: 'front#about' get 'contact', to: 'front#contact' get 'request/new', to: 'front#new' diff --git a/db/migrate/20240521135737_add_roadmap_reference_to_software_records.rb b/db/migrate/20240521135737_add_roadmap_reference_to_software_records.rb new file mode 100644 index 00000000..dd896519 --- /dev/null +++ b/db/migrate/20240521135737_add_roadmap_reference_to_software_records.rb @@ -0,0 +1,7 @@ +# frozen_string_literal: true + +class AddRoadmapReferenceToSoftwareRecords < ActiveRecord::Migration[6.1] + def change + add_column :software_records, :road_map, :text + end +end diff --git a/db/schema.rb b/db/schema.rb index d77429a1..f1c7e526 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -12,7 +12,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20_240_307_190_949) do +ActiveRecord::Schema.define(version: 20_240_521_135_737) do create_table "change_requests", force: :cascade do |t| t.integer "software_record_id", null: false t.string "change_title" @@ -99,6 +99,8 @@ t.string "monitor_errors" t.string "authentication_type" t.text "admin_users" + t.boolean "themes" + t.boolean "modules" t.string "service" t.string "installed_version" t.string "latest_version" @@ -120,8 +122,7 @@ t.text "dev_support_servers" t.date "date_cert_expires" t.string "monitor_certificates" - t.boolean "themes" - t.boolean "modules" + t.text "road_map" t.index ["hosting_environment_id"], name: "index_software_records_on_hosting_environment_id" t.index ["software_type_id"], name: "index_software_records_on_software_type_id" t.index ["status_id"], name: "index_software_records_on_status_id" diff --git a/spec/controllers/software_records_controller_spec.rb b/spec/controllers/software_records_controller_spec.rb index 29771eee..10adcc37 100644 --- a/spec/controllers/software_records_controller_spec.rb +++ b/spec/controllers/software_records_controller_spec.rb @@ -84,6 +84,7 @@ who: 'Test Admin', semester: 'Fall Quarter 2023', upgrade_docs: 'www.example.com', + road_map: 'Road Map', qa_support_servers: 'server.example.com', dev_support_servers: 'dev.example.com', date_cert_expires: '2020-01-01', @@ -112,6 +113,106 @@ def sign_in_user(admin) sign_in admin end + describe 'GET #list_road_map' do + it 'assigns the requested software records to @software_records' do + get :list_road_map + expect(response).to be_successful + end + + it 'renders the list_road_map template' do + get :list_road_map + expect(response).to render_template(:list_road_map) + end + end + + context 'when filter_by is software_types and software_type_filter is provided' do + it 'assigns filtered software records to @software_records' do + software_record = SoftwareRecord.create! valid_attributes + get :list_road_map, params: { filter_by: 'software_types', software_type_filter: SoftwareType.first.id } + expect(assigns(:software_records)).to include(software_record) + end + end + + context 'when filter_by is not software_types' do + it 'assigns all software records to @software_records' do + software_record = SoftwareRecord.create! valid_attributes + get :list_road_map, params: { filter_by: 'other_filter' } + expect(assigns(:software_records)).to include(software_record) + end + end + + context 'when software_type_filter is nil or empty' do + it 'assigns all software records to @software_records if filter_by is software_types' do + software_record = SoftwareRecord.create! valid_attributes + get :list_road_map, params: { filter_by: 'software_types', software_type_filter: nil } + expect(assigns(:software_records)).to include(software_record) + + get :list_road_map, params: { filter_by: 'software_types', software_type_filter: '' } + expect(assigns(:software_records)).to include(software_record) + end + end + + context 'when filtering by vendor_records' do + it 'assigns the filtered software records to @software_records' do + software_record = SoftwareRecord.create! valid_attributes + get :list_road_map, params: { filter_by: 'vendor_records', vendor_record_filter: VendorRecord.first.id } + expect(assigns(:software_records)).to match_array([software_record]) + end + end + + context 'when no filters are applied' do + it 'assigns all software records to @software_records' do + software_record1 = SoftwareRecord.create! valid_attributes + software_record2 = SoftwareRecord.create! valid_attributes + get :list_road_map + expect(assigns(:software_records)).to match_array([software_record1, software_record2]) + end + end + + describe 'GET #edit_road_map' do + it 'assigns the requested software record to @software_record' do + software_record = SoftwareRecord.create! valid_attributes + get :edit_road_map, params: { id: software_record.to_param } + expect(response).to be_successful + expect(response).to render_template(:edit_road_map) + expect(assigns(:software_record)).to eq(software_record) + end + + it 'renders the edit_road_map template' do + software_record = SoftwareRecord.create! valid_attributes + get :edit_road_map, params: { id: software_record.to_param } + expect(response).to render_template(:edit_road_map) + end + end + + describe 'PATCH/PUT #update_road_map' do + context 'with valid attributes' do + it 'updates the software record' do + software_record = SoftwareRecord.create! valid_attributes + patch :update_road_map, params: { id: software_record.id, software_record: { road_map: 'New Road Map' } } + software_record.reload + expect(software_record.road_map).to eq('New Road Map') + expect(response).to redirect_to(list_road_map_path) + end + + it 'redirects to the list_road_map path with a notice' do + software_record = SoftwareRecord.create! valid_attributes + patch :update_road_map, params: { id: software_record.id, software_record: { road_map: 'New Road Map' } } + expect(response).to redirect_to(list_road_map_path) + expect(flash[:notice]).to eq('Road map was successfully updated.') + end + end + + context 'with invalid attributes' do + it 'does not update the software record' do + software_record = SoftwareRecord.create! valid_attributes + patch :update_road_map, params: { id: software_record.id, software_record: invalid_attributes } + software_record.reload + expect(software_record.title).not_to eq('') + end + end + end + describe 'GET #index' do it 'returns a success response' do SoftwareRecord.create! valid_attributes @@ -151,6 +252,7 @@ def sign_in_user(admin) expect(response.body).to have_content('true') expect(response.body).to have_content('10') expect(response.body).to have_content('Review') + expect(response.body).to have_content('Road Map') expect(response.body).to have_content('Fall Quarter 2023') expect(response.body).to have_content('server.example.com') expect(response.body).to have_content('dev.example.com') @@ -230,6 +332,7 @@ def sign_in_user(admin) upgrade_status: 'Review', who: 'Test Admin', semester: 'Fall Quarter 2023', + road_map: 'Road Map', upgrade_docs: 'www.example.com', qa_support_servers: 'server.example.com', dev_support_servers: 'dev.example.com', @@ -262,6 +365,7 @@ def sign_in_user(admin) expect(software_record.priority).to have_content('10') expect(software_record.upgrade_status).to have_content('Review') expect(software_record.semester).to have_content('Fall Quarter 2023') + expect(software_record.road_map).to have_content('Road Map') expect(software_record.upgrade_docs).to have_content('www.example.com') expect(software_record.qa_support_servers).to have_content('server.example.com') expect(software_record.dev_support_servers).to have_content('dev.example.com') @@ -365,6 +469,7 @@ def sign_in_user(admin) upgrade_status: 'Review', who: 'Test Admin', semester: 'Fall Quarter 2023', + road_map: 'Road Map', upgrade_docs: 'www.example.com', qa_support_servers: 'server.example.com', dev_support_servers: 'dev.example.com', @@ -432,6 +537,7 @@ def sign_in_user(viewer) expect(response.body).to have_content('10') expect(response.body).to have_content('Review') expect(response.body).to have_content('Fall Quarter 2023') + expect(software_record.road_map).to have_content('Road Map') expect(response.body).to have_content('server.example.com') expect(response.body).to have_content('dev.example.com') expect(response.body).to have_content('2020-01-01') @@ -510,6 +616,7 @@ def sign_in_user(viewer) upgrade_status: 'Review', who: 'Test Admin', semester: 'Fall Quarter 2023', + road_map: 'Road Map', upgrade_docs: 'www.example.com', qa_support_servers: 'server.example.com', dev_support_servers: 'dev.example.com', @@ -542,6 +649,7 @@ def sign_in_user(viewer) expect(software_record.priority).to have_content('10') expect(software_record.upgrade_status).to have_content('Review') expect(software_record.semester).to have_content('Fall Quarter 2023') + expect(software_record.road_map).to have_content('Road Map') expect(software_record.upgrade_docs).to have_content('www.example.com') expect(software_record.qa_support_servers).to have_content('server.example.com') expect(software_record.dev_support_servers).to have_content('dev.example.com') @@ -644,6 +752,7 @@ def sign_in_user(viewer) upgrade_status: 'Review', who: 'Test Admin', semester: 'Fall Quarter 2023', + road_map: 'Road Map', upgrade_docs: 'www.example.com', qa_support_servers: 'server.example.com', dev_support_servers: 'dev.example.com', @@ -673,6 +782,35 @@ def sign_in_user(manager) sign_in manager end + describe 'GET #list_road_map' do + it 'assigns the requested software records to @software_records' do + get :list_road_map + expect(response).to be_successful + expect(response).to render_template(:list_road_map) + end + end + + describe 'GET #edit_road_map' do + it 'assigns the requested software record to @software_record' do + software_record = SoftwareRecord.create! valid_attributes + get :edit_road_map, params: { id: software_record.to_param } + expect(response).to be_successful + expect(response).to render_template(:edit_road_map) + end + end + + describe 'PATCH/PUT #update_road_map' do + context 'with valid attributes' do + it 'updates the software record' do + software_record = SoftwareRecord.create! valid_attributes + patch :update_road_map, params: { id: software_record.to_param, software_record: { road_map: 'New Road Map' } } + software_record.reload + expect(software_record.road_map).to eq('New Road Map') + expect(response).to redirect_to(list_road_map_path) + end + end + end + describe 'GET #index' do it 'returns a success response' do SoftwareRecord.create! valid_attributes @@ -711,6 +849,7 @@ def sign_in_user(manager) expect(response.body).to have_content('10') expect(response.body).to have_content('Review') expect(response.body).to have_content('Fall Quarter 2023') + expect(response.body).to have_content('Road Map') expect(response.body).to have_content('server.example.com') expect(response.body).to have_content('dev.example.com') expect(response.body).to have_content('2020-01-01') @@ -789,6 +928,7 @@ def sign_in_user(manager) upgrade_status: 'Review', who: 'Test Admin', semester: 'Fall Quarter 2023', + road_map: 'Road Map', upgrade_docs: 'www.example.com', qa_support_servers: 'server.example.com', dev_support_servers: 'dev.example.com', @@ -823,6 +963,7 @@ def sign_in_user(manager) expect(software_record.priority).to have_content('10') expect(software_record.upgrade_status).to have_content('Review') expect(software_record.semester).to have_content('Fall Quarter 2023') + expect(software_record.road_map).to have_content('Road Map') expect(software_record.upgrade_docs).to have_content('www.example.com') expect(software_record.qa_support_servers).to have_content('server.example.com') expect(software_record.dev_support_servers).to have_content('dev.example.com') @@ -924,6 +1065,7 @@ def sign_in_user(manager) end_of_life: true, priority: '10', upgrade_status: 'Review', + road_map: 'Road Map', who: 'Test Admin', semester: 'Fall Quarter 2023', upgrade_docs: 'www.example.com', @@ -955,6 +1097,34 @@ def sign_in_user(owner) sign_in owner end + describe 'GET #list_road_map' do + it 'assigns the requested software records to @software_records' do + get :list_road_map + expect(response).to be_successful + expect(response).to render_template(:list_road_map) + end + end + + describe 'GET #edit_road_map' do + it 'assigns the requested software record to @software_record' do + software_record = SoftwareRecord.create! valid_attributes + get :edit_road_map, params: { id: software_record.to_param } + expect(response).to be_successful + expect(response).to render_template(:edit_road_map) + end + end + + # describe "PATCH/PUT #update_road_map" do + # context "with valid attributes" do + # it "updates the software record" do + # software_record = SoftwareRecord.create! valid_attributes + # patch :update_road_map, params: { id: software_record.to_param, software_record: { road_map: "New Road Map" } } + # software_record.reload + # expect(software_record.road_map).to eq("New Road Map") + # expect(response).to redirect_to(list_road_map_path) + # end + # end + describe 'GET #index' do it 'returns a success response' do SoftwareRecord.create! valid_attributes @@ -993,6 +1163,7 @@ def sign_in_user(owner) expect(response.body).to have_content('10') expect(response.body).to have_content('Review') expect(response.body).to have_content('Fall Quarter 2023') + expect(response.body).to have_content('Fall Quarter 2023') expect(response.body).to have_content('server.example.com') expect(response.body).to have_content('dev.example.com') expect(response.body).to have_content('2020-01-01') @@ -1071,6 +1242,7 @@ def sign_in_user(owner) upgrade_status: 'Review', who: 'Test Admin', semester: 'Fall Quarter 2023', + road_map: 'Road Map', upgrade_docs: 'www.example.com', qa_support_servers: 'server.example.com', dev_support_servers: 'dev.example.com', @@ -1105,6 +1277,7 @@ def sign_in_user(owner) expect(software_record.priority).to have_content('10') expect(software_record.upgrade_status).to have_content('Review') expect(software_record.semester).to have_content('Fall Quarter 2023') + expect(software_record.road_map).to have_content('Road Map') expect(software_record.upgrade_docs).to have_content('www.example.com') expect(software_record.qa_support_servers).to have_content('server.example.com') expect(software_record.dev_support_servers).to have_content('dev.example.com') diff --git a/spec/views/software_records/edit.html.erb_spec.rb b/spec/views/software_records/edit.html.erb_spec.rb index f544efb4..4d51bd7e 100644 --- a/spec/views/software_records/edit.html.erb_spec.rb +++ b/spec/views/software_records/edit.html.erb_spec.rb @@ -43,6 +43,7 @@ breaking_changes: true, end_of_life: true, priority: '10', + road_map: 'Road Map', upgrade_status: 'Review', who: 'Test Admin', semester: 'Fall Quarter 2023', @@ -62,6 +63,7 @@ assert_select 'select[name=?]', 'software_record[status_id]' assert_select 'select[name=?]', 'software_record[software_type_id]' assert_select 'select[name=?]', 'software_record[vendor_record_id]' + assert_select 'textarea[name=?]', 'software_record[road_map]' end end diff --git a/spec/views/software_records/edit_road_map.html.erb_spec.rb b/spec/views/software_records/edit_road_map.html.erb_spec.rb new file mode 100644 index 00000000..ae1a2cb9 --- /dev/null +++ b/spec/views/software_records/edit_road_map.html.erb_spec.rb @@ -0,0 +1,65 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe 'software_records/edit_road_map', type: :view do + before(:each) do + allow(view).to(receive(:user_signed_in?) { true }) && allow(view).to(receive(:current_user) { FactoryBot.build(:admin) }) + VendorRecord.create!( + title: 'Vendor 1', + description: 'test vendor' + ) + SoftwareType.create!( + title: 'Web app', + description: 'test software type' + ) + Status.create!( + title: 'Test', + status_type: 'Design' + ) + HostingEnvironment.create!( + title: 'Test Env.', + description: 'test env.' + ) + @software_record = assign(:software_record, SoftwareRecord.create!( + title: 'MyTitle', + description: 'MyText', + status_id: Status.first.id, + hosting_environment_id: HostingEnvironment.first.id, + software_type_id: SoftwareType.first.id, + authentication_type: 'DUO', + vendor_record_id: VendorRecord.first.id, + created_by: 'Test User', + service: 'App Service', + installed_version: '4.5', + latest_version: '4.6', + proposed_version: '4.4', + last_upgrade_date: '2020-02-02', + upgrade_available: true, + vulnerabilities_reported: true, + vulnerabilities_fixed: true, + bug_fixes: true, + new_features: true, + breaking_changes: true, + end_of_life: true, + priority: '10', + road_map: 'Road Map', + upgrade_status: 'Review', + who: 'Test Admin', + semester: 'Fall Quarter 2023', + upgrade_docs: 'www.example.com' + )) + session[:previous] = dashboard_path + end + + it 'displays the Edit Road Map form' do + render + + expect(rendered).to have_css('h1.text-center', text: 'Edit Road Map') + expect(rendered).to have_css('form') + expect(rendered).to have_field('software_record_road_map', with: 'Road Map') + expect(rendered).to have_css('p.form-control-plaintext.text-white', text: 'MyTitle') + expect(rendered).to have_button('Update') + expect(rendered).to have_link('Back', href: software_records_path) + end +end diff --git a/spec/views/software_records/list_road_map.html.erb_spec.rb b/spec/views/software_records/list_road_map.html.erb_spec.rb new file mode 100644 index 00000000..fabfdd39 --- /dev/null +++ b/spec/views/software_records/list_road_map.html.erb_spec.rb @@ -0,0 +1,83 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe 'software_records/list_road_map', type: :view do + before(:each) do + VendorRecord.create!( + id: 311, + title: 'Vendor 122', + description: 'test vendor' + ) + VendorRecord.create!( + id: 411, + title: 'Vendor Filter', + description: 'test filter vendor' + ) + SoftwareType.create!( + id: 111, + title: 'Web app', + description: 'test software type' + ) + Status.create!( + title: 'Test', + status_type: 'Design' + ) + HostingEnvironment.create!( + title: 'Test Env.', + description: 'test env.' + ) + assign(:software_records, [ + SoftwareRecord.create!( + title: 'Title', + description: 'MyText', + status_id: Status.first.id, + hosting_environment_id: HostingEnvironment.first.id, + date_implemented: '2020-12-12', + road_map: 'Road map 1', + vendor_record_id: VendorRecord.first.id, + software_type_id: SoftwareType.first.id, + created_by: 'Test User', + priority: 10 + ), + SoftwareRecord.create!( + title: 'Title', + description: 'MyText', + road_map: 'Road map 2', + status_id: Status.first.id, + hosting_environment_id: HostingEnvironment.first.id, + date_implemented: '2020-12-12', + vendor_record_id: VendorRecord.first.id, + software_type_id: SoftwareType.first.id, + created_by: 'Test User' + ) + ]) + assign(:vendor_records, VendorRecord.all) + assign(:software_types, SoftwareType.all) + + allow(view).to(receive(:user_signed_in?) { true }) && allow(view).to(receive(:current_user) do + FactoryBot.build(:admin) + end) + end + + it 'renders a list of software_records' do + render + assert_select 'td:nth-child(1)', text: 'Title'.to_s, count: 2 + expect(rendered).to_not have_text('Status') + end + + it 'displays the software records table' do + render + + expect(rendered).to have_content('Title') + expect(rendered).to have_content('Road Map') + expect(rendered).to have_link('Edit Road Map', href: edit_road_map_software_record_path(SoftwareRecord.first)) + expect(rendered).to have_link('Edit Road Map', href: edit_road_map_software_record_path(SoftwareRecord.second)) + end + + it 'does not wrap the Edit Road Map button text' do + render + + expect(rendered).to have_css('a.btn.btn-primary.action-btn', text: 'Edit Road Map', style: 'white-space: nowrap;') + end +end diff --git a/spec/views/software_records/show.html.erb_spec.rb b/spec/views/software_records/show.html.erb_spec.rb index fa97b8c1..9747b930 100644 --- a/spec/views/software_records/show.html.erb_spec.rb +++ b/spec/views/software_records/show.html.erb_spec.rb @@ -66,6 +66,7 @@ dev_support_servers: 'dev.example.com', date_cert_expires: '2020-01-01', monitor_certificates: 'Yes', + road_map: "Road one\nRoad two", notes: "Line one\nLine two", themes: true, modules: true @@ -81,6 +82,7 @@ expect(rendered).to match(/1/) expect(rendered).to match(/DUO/) expect(rendered).to match(%r{Line one\n
Line two}) + expect(rendered).to match(%r{Road one\n
Road two}) end it 'renders change management attributes in

' do