11import DateTime from '../../../src/components/date-time.vue' ;
22import FormAttachmentNameMismatch from '../../../src/components/form-attachment/name-mismatch.vue' ;
33import FormAttachmentRow from '../../../src/components/form-attachment/row.vue' ;
4- import FormAttachmentLinkDataset from '../../../src/components/form-attachment/link-dataset.vue' ;
54import FormAttachmentUploadFiles from '../../../src/components/form-attachment/upload-files.vue' ;
65
76import testData from '../../data' ;
@@ -1037,15 +1036,25 @@ describe('FormAttachmentList', () => {
10371036 } ) ;
10381037
10391038 describe ( 'dataset linking' , ( ) => {
1040- beforeEach ( ( ) => {
1039+ it ( 'sends a request for datasets if the project has one' , ( ) => {
1040+ testData . extendedProjects . createPast ( 1 , { forms : 2 , datasets : 1 } ) ;
1041+ testData . extendedDatasets . createPast ( 1 ) ;
10411042 testData . extendedForms . createPast ( 1 , { draft : true } ) ;
1043+ testData . standardFormAttachments . createPast ( 1 ) ;
1044+ return load ( '/projects/1/forms/f/draft/attachments' , { root : false } )
1045+ . respondWithData ( ( ) => testData . extendedDatasets . sorted ( ) )
1046+ . testRequests ( [ { url : '/v1/projects/1/datasets' } ] ) ;
10421047 } ) ;
10431048
1044- it ( 'autolinks dataset' , async ( ) => {
1049+ it ( 'renders correctly for an attachment linked to a dataset' , async ( ) => {
1050+ testData . extendedProjects . createPast ( 1 , { forms : 2 , datasets : 1 } ) ;
1051+ testData . extendedDatasets . createPast ( 1 , { name : 'shovels' } ) ;
1052+ testData . extendedForms . createPast ( 1 , { draft : true } ) ;
10451053 testData . standardFormAttachments . createPast ( 1 , { type : 'file' , name : 'shovels.csv' , datasetExists : true } ) ;
10461054 const component = await load ( '/projects/1/forms/f/draft/attachments' , {
10471055 root : false
1048- } ) ;
1056+ } )
1057+ . respondWithData ( ( ) => testData . extendedDatasets . sorted ( ) ) ;
10491058 component . get ( 'td.form-attachment-list-uploaded .dataset-label' ) . text ( ) . should . equal ( 'Linked to Entity List shovels' ) ;
10501059 component . get ( 'td.form-attachment-list-action' ) . text ( ) . should . equal ( 'Upload a file to override.' ) ;
10511060 const a = component . get ( 'td.form-attachment-list-name a' ) ;
@@ -1055,12 +1064,9 @@ describe('FormAttachmentList', () => {
10551064
10561065 describe ( 'Datasets preview hint' , ( ) => {
10571066 beforeEach ( ( ) => {
1058- testData . extendedProjects . createPast ( 1 , {
1059- name : 'My Project Name' ,
1060- forms : 1 ,
1061- datasets : 1
1062- } ) ;
1067+ testData . extendedProjects . createPast ( 1 , { forms : 2 , datasets : 1 } ) ;
10631068 testData . extendedDatasets . createPast ( 1 , { name : 'shovels' } ) ;
1069+ testData . extendedForms . createPast ( 1 , { draft : true } ) ;
10641070 } ) ;
10651071
10661072 const loadAttachmentComponent = ( ) => load ( '/projects/1/forms/f/draft/attachments' , {
@@ -1080,39 +1086,145 @@ describe('FormAttachmentList', () => {
10801086 } ) ;
10811087 } ) ;
10821088
1083- describe ( 'link dataset ' , ( ) => {
1089+ describe ( '"Link Entity List" button ' , ( ) => {
10841090 beforeEach ( ( ) => {
1085- testData . extendedProjects . createPast ( 1 , {
1086- name : 'My Project Name' ,
1087- forms : 1 ,
1088- datasets : 1
1089- } ) ;
1091+ testData . extendedProjects . createPast ( 1 , { forms : 2 , datasets : 1 } ) ;
10901092 testData . extendedDatasets . createPast ( 1 , { name : 'shovels' } ) ;
1093+ testData . extendedForms . createPast ( 1 , { draft : true } ) ;
10911094 testData . standardFormAttachments . createPast ( 1 , { type : 'file' , name : 'shovels.csv' , blobExists : true } ) ;
10921095 } ) ;
10931096
1094- it ( 'shows Link Dataset button' , async ( ) => {
1097+ it ( 'shows the button if an attachment can be linked ' , async ( ) => {
10951098 const component = await load ( '/projects/1/forms/f/draft/attachments' , {
10961099 root : false
10971100 } )
10981101 . respondWithData ( ( ) => testData . extendedDatasets . sorted ( ) ) ;
10991102 component . get ( 'td.form-attachment-list-action .btn-link-dataset' ) . exists ( ) . should . be . true ( ) ;
11001103 } ) ;
11011104
1102- it ( 'links dataset' , async ( ) => {
1103- await load ( '/projects/1/forms/f/draft/attachments' , {
1104- root : false
1105- } )
1105+ it ( 'updates the attachment after it is linked' , ( ) =>
1106+ load ( '/projects/1/forms/f/draft/attachments' , { root : false } )
11061107 . respondWithData ( ( ) => testData . extendedDatasets . sorted ( ) )
11071108 . complete ( )
11081109 . request ( async ( component ) => {
11091110 await component . get ( 'td.form-attachment-list-action .btn-link-dataset' ) . trigger ( 'click' ) ;
1110- component . getComponent ( FormAttachmentLinkDataset ) . get ( '.btn-link-dataset' ) . trigger ( 'click' ) ;
1111+ return component . get ( '#form-attachment-link-dataset .btn-link-dataset' ) . trigger ( 'click' ) ;
11111112 } )
11121113 . respondWithSuccess ( )
11131114 . afterResponse ( component => {
11141115 component . get ( 'td.form-attachment-list-uploaded .dataset-label' ) . text ( ) . should . equal ( 'Linked to Entity List shovels' ) ;
11151116 component . get ( 'td.form-attachment-list-action' ) . text ( ) . should . equal ( 'Upload a file to override.' ) ;
1117+ } ) ) ;
1118+ } ) ;
1119+
1120+ describe ( 'linking after publishing new dataset' , ( ) => {
1121+ it ( 'shows "Link Entity List" after first dataset is published' , ( ) => {
1122+ testData . extendedForms . createPast ( 1 , { draft : true } ) ;
1123+ // Create an attachment with the same name as the dataset that will be
1124+ // published along with the form draft.
1125+ const attachments = testData . standardFormAttachments
1126+ . createPast ( 1 , { type : 'file' , name : 'shovels.csv' , blobExists : true } )
1127+ . sorted ( ) ;
1128+ return load ( '/projects/1/forms/f/draft/attachments' )
1129+ . complete ( )
1130+ . load ( '/projects/1/forms/f/draft' , {
1131+ project : false ,
1132+ form : false ,
1133+ formDraft : false ,
1134+ attachments : false
1135+ } )
1136+ . complete ( )
1137+ . request ( async ( app ) => {
1138+ await app . get ( '#form-draft-status-publish-button' ) . trigger ( 'click' ) ;
1139+ return app . get ( '#form-draft-publish .btn-primary' ) . trigger ( 'click' ) ;
1140+ } )
1141+ . respondWithData ( ( ) => {
1142+ testData . extendedFormDrafts . publish ( - 1 ) ;
1143+ testData . extendedDatasets . createPast ( 1 , { name : 'shovels' } ) ;
1144+ return { success : true } ;
1145+ } )
1146+ . respondWithData ( ( ) => testData . extendedForms . last ( ) )
1147+ . respondWithData ( ( ) => ( {
1148+ ...testData . extendedProjects . last ( ) ,
1149+ datasets : 1
1150+ } ) )
1151+ . respondWithData ( ( ) => attachments )
1152+ . complete ( )
1153+ . request ( app =>
1154+ app . get ( '#form-head-create-draft-button' ) . trigger ( 'click' ) )
1155+ . respondWithData ( ( ) => {
1156+ testData . extendedFormVersions . createNew ( { draft : true } ) ;
1157+ return { success : true } ;
1158+ } )
1159+ . respondFor ( '/projects/1/forms/f/draft' , {
1160+ project : false ,
1161+ form : false
1162+ } )
1163+ . complete ( )
1164+ . route ( '/projects/1/forms/f/draft/attachments' )
1165+ . respondWithData ( ( ) => testData . extendedDatasets . sorted ( ) )
1166+ // Now that a dataset has been published, a request should be sent for
1167+ // `datasets`, even though one wasn't sent before.
1168+ . testRequests ( [ { url : '/v1/projects/1/datasets' } ] )
1169+ . afterResponse ( app => {
1170+ const button = app . find ( '.form-attachment-row .btn-link-dataset' ) ;
1171+ button . exists ( ) . should . be . true ( ) ;
1172+ } ) ;
1173+ } ) ;
1174+
1175+ it ( 'shows "Link Entity List" after another dataset is published' , ( ) => {
1176+ const project = testData . extendedProjects
1177+ . createPast ( 1 , { forms : 2 , datasets : 1 } )
1178+ . last ( ) ;
1179+ // There is an existing dataset named shovels. Publishing the form draft
1180+ // will publish a new dataset named trees.
1181+ testData . extendedDatasets . createPast ( 1 , { name : 'shovels' } ) ;
1182+ testData . extendedForms . createPast ( 1 , { draft : true } ) ;
1183+ const attachments = testData . standardFormAttachments
1184+ . createPast ( 1 , { type : 'file' , name : 'trees.csv' , blobExists : true } )
1185+ . sorted ( ) ;
1186+ return load ( '/projects/1/forms/f/draft/attachments' )
1187+ . respondWithData ( ( ) => testData . extendedDatasets . sorted ( ) )
1188+ . complete ( )
1189+ . load ( '/projects/1/forms/f/draft' , {
1190+ project : false ,
1191+ form : false ,
1192+ formDraft : false ,
1193+ attachments : false
1194+ } )
1195+ . complete ( )
1196+ . request ( async ( app ) => {
1197+ await app . get ( '#form-draft-status-publish-button' ) . trigger ( 'click' ) ;
1198+ return app . get ( '#form-draft-publish .btn-primary' ) . trigger ( 'click' ) ;
1199+ } )
1200+ . respondWithData ( ( ) => {
1201+ testData . extendedFormDrafts . publish ( - 1 ) ;
1202+ testData . extendedDatasets . createPast ( 1 , { name : 'trees' } ) ;
1203+ return { success : true } ;
1204+ } )
1205+ . respondWithData ( ( ) => testData . extendedForms . last ( ) )
1206+ . respondWithData ( ( ) => ( { ...project , datasets : 2 } ) )
1207+ . respondWithData ( ( ) => attachments )
1208+ . complete ( )
1209+ . request ( app =>
1210+ app . get ( '#form-head-create-draft-button' ) . trigger ( 'click' ) )
1211+ . respondWithData ( ( ) => {
1212+ testData . extendedFormVersions . createNew ( { draft : true } ) ;
1213+ return { success : true } ;
1214+ } )
1215+ . respondFor ( '/projects/1/forms/f/draft' , {
1216+ project : false ,
1217+ form : false
1218+ } )
1219+ . complete ( )
1220+ . route ( '/projects/1/forms/f/draft/attachments' )
1221+ . respondWithData ( ( ) => testData . extendedDatasets . sorted ( ) )
1222+ // After the form draft is published, a new request should be sent for
1223+ // `datasets`.
1224+ . testRequests ( [ { url : '/v1/projects/1/datasets' } ] )
1225+ . afterResponse ( app => {
1226+ const button = app . find ( '.form-attachment-row .btn-link-dataset' ) ;
1227+ button . exists ( ) . should . be . true ( ) ;
11161228 } ) ;
11171229 } ) ;
11181230 } ) ;
0 commit comments