require " rails_helper "
RSpec . describe DataProtectionConfirmationBannerComponent , type : :component do
include GovukComponent
let ( :component ) { described_class . new ( user : , organisation : ) }
let ( :render ) { render_inline ( component ) }
let ( :user ) { create ( :user ) }
let ( :organisation ) { user . organisation }
context " when user is support and organisation is blank " do
let ( :user ) { create ( :user , :support ) }
let ( :organisation ) { nil }
it " does not display banner " do
expect ( component . display_banner? ) . to eq ( false )
expect ( render . content ) . to be_empty
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://dluhcdigital.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 : ) }
let! ( :dpo ) { create ( :user , :data_protection_officer , organisation : ) }
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
context " when user is a DPO " do
let ( :organisation ) { create ( :organisation , :without_dpc ) }
let ( :user ) { create ( :user , :data_protection_officer , organisation : ) }
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
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
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://dluhcdigital.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 : ) }
let! ( :dpo ) { create ( :user , :data_protection_officer , organisation : ) }
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
context " when user is a DPO " do
let ( :organisation ) { create ( :organisation , :without_dpc ) }
let ( :user ) { create ( :user , :data_protection_officer , organisation : ) }
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
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