@ -23,6 +23,10 @@ RSpec.describe DataProtectionConfirmationBannerComponent, type: :component do
organisation . users . where ( is_dpo : true ) . destroy_all
organisation . users . where ( is_dpo : true ) . destroy_all
end
end
context " when org does not have a signed data sharing agreement " do
let ( :organisation ) { create ( :organisation , :without_dpc ) }
let ( :user ) { create ( :user , organisation : , with_dsa : false ) }
it " displays the banner " do
it " displays the banner " do
expect ( component . display_banner? ) . to eq ( true )
expect ( component . display_banner? ) . to eq ( true )
expect ( render ) . to have_link (
expect ( render ) . to have_link (
@ -33,6 +37,14 @@ RSpec.describe DataProtectionConfirmationBannerComponent, type: :component do
end
end
end
end
context " when org does have a signed data sharing agreement " do
it " does not display banner " do
expect ( component . display_banner? ) . to eq ( false )
expect ( render . content ) . to be_empty
end
end
end
context " when org has a DPO " do
context " when org has a DPO " do
context " when org does not have a signed data sharing agreement " do
context " when org does not have a signed data sharing agreement " do
context " when user is not a DPO " do
context " when user is not a DPO " do
@ -81,7 +93,7 @@ RSpec.describe DataProtectionConfirmationBannerComponent, type: :component do
end
end
end
end
context " when org has a signed data sharing agrem eent " do
context " when org has a signed data sharing agreem ent " do
it " does not display banner " do
it " does not display banner " do
expect ( component . display_banner? ) . to eq ( false )
expect ( component . display_banner? ) . to eq ( false )
expect ( render . content ) . to be_empty
expect ( render . content ) . to be_empty
@ -121,88 +133,5 @@ RSpec.describe DataProtectionConfirmationBannerComponent, type: :component do
end
end
end
end
end
end
context " when org does not have a DPO " do
before do
organisation . users . where ( is_dpo : true ) . destroy_all
end
it " displays the banner " do
expect ( component . display_banner? ) . to eq ( true )
expect ( render ) . to have_link (
" Contact helpdesk to assign a data protection officer " ,
href : " https://mhclgdigital.atlassian.net/servicedesk/customer/portal/6/group/11 " ,
)
expect ( render ) . to have_selector ( " p " , text : " To create logs your organisation must state a data protection officer. They must sign the Data Sharing Agreement. " )
end
end
context " when org has a DPO " do
context " when org does not have a signed data sharing agreement " do
context " when user is not a DPO " do
let ( :organisation ) { create ( :organisation , :without_dpc ) }
let ( :user ) { create ( :user , organisation : , with_dsa : false ) }
let! ( :dpo ) { create ( :user , :data_protection_officer , organisation : , with_dsa : false ) }
it " displays the banner and shows DPOs " do
expect ( component . display_banner? ) . to eq ( true )
expect ( render . css ( " a " ) ) . to be_empty
expect ( render ) . to have_selector ( " p " , text : " Your data protection officer must accept the Data Sharing Agreement on CORE before you can create any logs. " )
expect ( render ) . to have_selector ( " p " , text : " You can ask: #{ dpo . name } " )
end
context " and has a parent organisation that owns stock and has signed DSA " do
before do
parent_organisation = create ( :organisation , holds_own_stock : true )
create ( :organisation_relationship , child_organisation : organisation , parent_organisation : )
end
it " displays the banner and shows DPOs " do
expect ( component . display_banner? ) . to eq ( true )
expect ( render . css ( " a " ) ) . to be_empty
expect ( render ) . to have_selector ( " p " , text : " Your data protection officer must accept the Data Sharing Agreement on CORE before you can create any logs. " )
expect ( render ) . to have_selector ( " p " , text : " You can ask: #{ dpo . name } " )
end
end
end
context " when user is a DPO " do
let ( :organisation ) { create ( :organisation , :without_dpc ) }
let ( :user ) { create ( :user , :data_protection_officer , organisation : , with_dsa : false ) }
it " displays the banner and asks to sign " do
expect ( component . display_banner? ) . to eq ( true )
expect ( render ) . to have_link (
" Read the Data Sharing Agreement " ,
href : " /organisations/ #{ organisation . id } /data-sharing-agreement " ,
)
expect ( render ) . to have_selector ( " p " , text : " Your organisation must accept the Data Sharing Agreement before you can create any logs. " )
end
context " and has a parent organisation that owns stock and has signed DSA " do
before do
parent_organisation = create ( :organisation , holds_own_stock : true )
create ( :organisation_relationship , child_organisation : organisation , parent_organisation : )
end
it " displays the banner and asks to sign " do
expect ( component . display_banner? ) . to eq ( true )
expect ( render ) . to have_link (
" Read the Data Sharing Agreement " ,
href : " /organisations/ #{ organisation . id } /data-sharing-agreement " ,
)
expect ( render ) . to have_selector ( " p " , text : " Your organisation must accept the Data Sharing Agreement before you can create any logs. " )
end
end
end
end
context " when org has a signed data sharing agremeent " do
it " does not display banner " do
expect ( component . display_banner? ) . to eq ( false )
expect ( render . content ) . to be_empty
end
end
end
end
end
end
end