@@ -2002,4 +2002,170 @@ context('Instrument tests', () => {
20022002 cy . should ( 'not.contain' , proposal1 . title ) ;
20032003 } ) ;
20042004 } ) ;
2005+
2006+ describe ( 'Instrument contact visibility tests' , ( ) => {
2007+ let contactOnlyInstrumentId : number ;
2008+ let scientistInstrumentId : number ;
2009+ let createdProposalPk : number ;
2010+ let createdScientistProposalPk : number ;
2011+
2012+ const contactOnlyInstrument = {
2013+ name : faker . word . words ( 2 ) ,
2014+ shortCode : faker . string . alphanumeric ( 15 ) ,
2015+ description : faker . word . words ( 5 ) ,
2016+ managerUserId : scientist2 . id ,
2017+ } ;
2018+
2019+ const scientistInstrument = {
2020+ name : faker . word . words ( 2 ) ,
2021+ shortCode : faker . string . alphanumeric ( 15 ) ,
2022+ description : faker . word . words ( 5 ) ,
2023+ managerUserId : scientist1 . id ,
2024+ } ;
2025+
2026+ beforeEach ( function ( ) {
2027+ if ( featureFlags . getEnabledFeatures ( ) . get ( FeatureId . SCHEDULER ) ) {
2028+ cy . updateUserRoles ( {
2029+ id : scientist2 . id ,
2030+ roles : [ initialDBData . roles . instrumentScientist ] ,
2031+ } ) ;
2032+ }
2033+
2034+ //create an instrument where scientist2 is only the contact and not a scientist
2035+ cy . createInstrument ( contactOnlyInstrument ) . then ( ( result ) => {
2036+ if ( result . createInstrument ) {
2037+ contactOnlyInstrumentId = result . createInstrument . id ;
2038+
2039+ cy . assignInstrumentToCall ( {
2040+ callId : initialDBData . call . id ,
2041+ instrumentFapIds : [ { instrumentId : contactOnlyInstrumentId } ] ,
2042+ } ) ;
2043+ }
2044+ } ) ;
2045+
2046+ //create an instrument where scientist2 is an instrument scientist
2047+ cy . createInstrument ( scientistInstrument ) . then ( ( result ) => {
2048+ if ( result . createInstrument ) {
2049+ scientistInstrumentId = result . createInstrument . id ;
2050+
2051+ cy . assignInstrumentToCall ( {
2052+ callId : initialDBData . call . id ,
2053+ instrumentFapIds : [ { instrumentId : scientistInstrumentId } ] ,
2054+ } ) ;
2055+
2056+ cy . assignScientistsToInstrument ( {
2057+ instrumentId : scientistInstrumentId ,
2058+ scientistIds : [ scientist2 . id ] ,
2059+ } ) ;
2060+ }
2061+ } ) ;
2062+
2063+ //create a proposal and assign it to the contact only instrument
2064+ cy . createProposal ( { callId : initialDBData . call . id } ) . then ( ( result ) => {
2065+ if ( result . createProposal ) {
2066+ createdProposalPk = result . createProposal . primaryKey ;
2067+
2068+ cy . updateProposal ( {
2069+ proposalPk : createdProposalPk ,
2070+ title : proposal1 . title ,
2071+ abstract : proposal1 . abstract ,
2072+ } ) ;
2073+
2074+ cy . assignProposalsToInstruments ( {
2075+ proposalPks : [ createdProposalPk ] ,
2076+ instrumentIds : [ contactOnlyInstrumentId ] ,
2077+ } ) ;
2078+
2079+ cy . updateTechnicalReviewAssignee ( {
2080+ proposalPks : [ createdProposalPk ] ,
2081+ userId : scientist2 . id ,
2082+ instrumentId : contactOnlyInstrumentId ,
2083+ } ) ;
2084+ }
2085+ } ) ;
2086+
2087+ //create a proposal and assign it to the instrument where scientist2 is a scientist
2088+ cy . createProposal ( { callId : initialDBData . call . id } ) . then ( ( result ) => {
2089+ if ( result . createProposal ) {
2090+ createdScientistProposalPk = result . createProposal . primaryKey ;
2091+
2092+ cy . updateProposal ( {
2093+ proposalPk : createdScientistProposalPk ,
2094+ title : proposal2 . title ,
2095+ abstract : proposal2 . abstract ,
2096+ } ) ;
2097+
2098+ cy . assignProposalsToInstruments ( {
2099+ proposalPks : [ createdScientistProposalPk ] ,
2100+ instrumentIds : [ scientistInstrumentId ] ,
2101+ } ) ;
2102+
2103+ cy . updateTechnicalReviewAssignee ( {
2104+ proposalPks : [ createdScientistProposalPk ] ,
2105+ userId : scientist2 . id ,
2106+ instrumentId : scientistInstrumentId ,
2107+ } ) ;
2108+ }
2109+ } ) ;
2110+
2111+ cy . login ( scientist2 ) ;
2112+ cy . visit ( '/' ) ;
2113+ } ) ;
2114+
2115+ it ( 'Instrument contact should see their instrument in the instrument filter dropdown' , ( ) => {
2116+ cy . contains ( 'Proposals' ) ;
2117+
2118+ selectAllProposalsFilterStatus ( ) ;
2119+
2120+ cy . finishedLoading ( ) ;
2121+
2122+ cy . get ( '[data-cy="instrument-filter"]' ) . click ( ) ;
2123+
2124+ cy . get ( '[role="listbox"]' )
2125+ . contains ( contactOnlyInstrument . name )
2126+ . should ( 'exist' ) ;
2127+
2128+ cy . get ( '[role="listbox"]' )
2129+ . contains ( scientistInstrument . name )
2130+ . should ( 'exist' ) ;
2131+ } ) ;
2132+
2133+ it ( 'Instrument contact should see proposals when filtering by their instrument' , ( ) => {
2134+ cy . contains ( 'Proposals' ) ;
2135+
2136+ selectAllProposalsFilterStatus ( ) ;
2137+
2138+ cy . finishedLoading ( ) ;
2139+
2140+ cy . get ( '[data-cy="instrument-filter"]' ) . click ( ) ;
2141+ cy . get ( '[role="listbox"]' ) . contains ( contactOnlyInstrument . name ) . click ( ) ;
2142+ cy . finishedLoading ( ) ;
2143+
2144+ cy . contains ( proposal1 . title ) . should ( 'exist' ) ;
2145+ } ) ;
2146+
2147+ it ( 'Instrument scientist should see proposals when filtering by their scientist instrument' , ( ) => {
2148+ cy . contains ( 'Proposals' ) ;
2149+
2150+ selectAllProposalsFilterStatus ( ) ;
2151+
2152+ cy . finishedLoading ( ) ;
2153+
2154+ cy . get ( '[data-cy="instrument-filter"]' ) . click ( ) ;
2155+ cy . get ( '[role="listbox"]' ) . contains ( scientistInstrument . name ) . click ( ) ;
2156+ cy . finishedLoading ( ) ;
2157+
2158+ cy . contains ( proposal2 . title ) . should ( 'exist' ) ;
2159+ } ) ;
2160+
2161+ it ( 'Instrument contact should see their instrument on the instruments page' , ( ) => {
2162+ cy . visit ( '/Instruments' ) ;
2163+
2164+ cy . finishedLoading ( ) ;
2165+
2166+ cy . contains ( contactOnlyInstrument . name ) . should ( 'exist' ) ;
2167+
2168+ cy . contains ( scientistInstrument . name ) . should ( 'exist' ) ;
2169+ } ) ;
2170+ } ) ;
20052171} ) ;
0 commit comments