@@ -1187,6 +1187,250 @@ func TestManualRunBuildParameterMultiApplication(t *testing.T) {
11871187 assert .Equal (t , "github" , wr .WorkflowNodeRuns [w .WorkflowData .Node .Triggers [0 ].ChildNode .Triggers [0 ].ChildNode .ID ][0 ].VCSServer )
11881188}
11891189
1190+ func TestManualRunBuildParameterNoApplicationOnRoot (t * testing.T ) {
1191+ db , cache , end := test .SetupPG (t , bootstrap .InitiliazeDB )
1192+ defer end ()
1193+ u , _ := assets .InsertAdminUser (t , db )
1194+
1195+ // Create project
1196+ key := sdk .RandomString (10 )
1197+ proj := assets .InsertTestProject (t , db , cache , key , key )
1198+ vcsServer := sdk.ProjectVCSServerLink {
1199+ ProjectID : proj .ID ,
1200+ Name : "github" ,
1201+ }
1202+ vcsServer .Set ("token" , "foo" )
1203+ vcsServer .Set ("secret" , "bar" )
1204+ assert .NoError (t , repositoriesmanager .InsertProjectVCSServerLink (context .TODO (), db , & vcsServer ))
1205+
1206+ vcsServer2 := sdk.ProjectVCSServerLink {
1207+ ProjectID : proj .ID ,
1208+ Name : "stash" ,
1209+ }
1210+ vcsServer2 .Set ("token" , "foo" )
1211+ vcsServer2 .Set ("secret" , "bar" )
1212+ assert .NoError (t , repositoriesmanager .InsertProjectVCSServerLink (context .TODO (), db , & vcsServer2 ))
1213+
1214+ allSrv , err := services .LoadAll (context .TODO (), db )
1215+ for _ , s := range allSrv {
1216+ if err := services .Delete (db , & s ); err != nil {
1217+ t .Fatalf ("unable to delete service: %v" , err )
1218+ }
1219+ }
1220+
1221+ mockVCSSservice , _ := assets .InsertService (t , db , "TestManualRunBuildParameterMultiApplication" , services .TypeVCS )
1222+ defer func () {
1223+ services .Delete (db , mockVCSSservice )
1224+ }()
1225+
1226+ //This is a mock for the vcs service
1227+ services .HTTPClient = mock (
1228+ func (r * http.Request ) (* http.Response , error ) {
1229+ body := new (bytes.Buffer )
1230+ w := new (http.Response )
1231+ enc := json .NewEncoder (body )
1232+ w .Body = ioutil .NopCloser (body )
1233+
1234+ switch r .URL .String () {
1235+ case "/vcs/stash/repos/ovh/cds" :
1236+ repo := sdk.VCSRepo {
1237+ URL : "https" ,
1238+ Name : "cds" ,
1239+ ID : "123" ,
1240+ Fullname : "ovh/cds" ,
1241+ Slug : "ovh" ,
1242+ HTTPCloneURL : "https://stash.com/ovh/cds.git" ,
1243+ SSHCloneURL : "git://stash.com/ovh/cds.git" ,
1244+ }
1245+ if err := enc .Encode (repo ); err != nil {
1246+ return writeError (w , err )
1247+ }
1248+ case "/vcs/stash/repos/ovh/cds/branches" :
1249+ bs := []sdk.VCSBranch {
1250+ {
1251+ LatestCommit : "defaultCommit" ,
1252+ DisplayID : "defaultBranch" ,
1253+ Default : true ,
1254+ ID : "1" ,
1255+ },
1256+ }
1257+ if err := enc .Encode (bs ); err != nil {
1258+ return writeError (w , err )
1259+ }
1260+ case "/vcs/stash/repos/ovh/cds/branches/?branch=feat%2Fbranch" :
1261+ return writeError (w , sdk .ErrNotFound )
1262+ case "/vcs/github/repos/sguiheux/demo/branches" :
1263+ bs := []sdk.VCSBranch {
1264+ {
1265+ LatestCommit : "defaultCommit" ,
1266+ DisplayID : "defaultBranch" ,
1267+ Default : true ,
1268+ ID : "1" ,
1269+ },
1270+ }
1271+ if err := enc .Encode (bs ); err != nil {
1272+ return writeError (w , err )
1273+ }
1274+ case "/vcs/stash/repos/ovh/cds/commits/defaultCommit" :
1275+ c := sdk.VCSCommit {
1276+ Author : sdk.VCSAuthor {
1277+ Name : "john.snow" ,
1278+ Email : "john.snow@winterfell" ,
1279+ },
1280+ Hash : "defaultCommit" ,
1281+ Message : "super default commit" ,
1282+ Timestamp : time .Now ().Unix (),
1283+ }
1284+ if err := enc .Encode (c ); err != nil {
1285+ return writeError (w , err )
1286+ }
1287+ // NEED get REPO
1288+ case "/vcs/github/repos/sguiheux/demo" :
1289+ repo := sdk.VCSRepo {
1290+ URL : "https" ,
1291+ Name : "demo" ,
1292+ ID : "123" ,
1293+ Fullname : "sguiheux/demo" ,
1294+ Slug : "sguiheux" ,
1295+ HTTPCloneURL : "https://github.com/sguiheux/demo.git" ,
1296+ SSHCloneURL : "git://github.com/sguiheux/demo.git" ,
1297+ }
1298+ if err := enc .Encode (repo ); err != nil {
1299+ return writeError (w , err )
1300+ }
1301+ // NEED GET BRANCH TO GET LATEST COMMIT
1302+ //case "/vcs/github/repos/sguiheux/demo/branches/?branch=feat%2Fbranch":
1303+ case "/vcs/github/repos/sguiheux/demo/branches/?branch=defaultBranch" :
1304+ b := sdk.VCSBranch {
1305+ Default : false ,
1306+ DisplayID : "defaultBranch" ,
1307+ LatestCommit : "mylastcommit" ,
1308+ }
1309+ if err := enc .Encode (b ); err != nil {
1310+ return writeError (w , err )
1311+ }
1312+ // NEED GET COMMIT TO GET AUTHOR AND MESSAGE
1313+ case "/vcs/github/repos/sguiheux/demo/commits/mylastcommit" :
1314+ c := sdk.VCSCommit {
1315+ Author : sdk.VCSAuthor {
1316+ Name : "steven.guiheux" ,
1317+ Email : "sg@foo.bar" ,
1318+ },
1319+ Hash : "mylastcommit" ,
1320+ Message : "super commit" ,
1321+ Timestamp : time .Now ().Unix (),
1322+ }
1323+ if err := enc .Encode (c ); err != nil {
1324+ return writeError (w , err )
1325+ }
1326+ default :
1327+ t .Fatalf ("UNKNOWN ROUTE: %s" , r .URL .String ())
1328+ }
1329+
1330+ return w , nil
1331+ },
1332+ )
1333+
1334+ pip := createEmptyPipeline (t , db , cache , proj , u )
1335+ app1 := createApplication1 (t , db , cache , proj , u )
1336+ app2 := createApplication2 (t , db , cache , proj , u )
1337+
1338+ // RELOAD PROJECT WITH DEPENDENCIES
1339+ proj .Applications = append (proj .Applications , * app1 , * app2 )
1340+ proj .Pipelines = append (proj .Pipelines , * pip )
1341+
1342+ // WORKFLOW TO RUN
1343+ w := sdk.Workflow {
1344+ ProjectID : proj .ID ,
1345+ ProjectKey : proj .Key ,
1346+ Name : sdk .RandomString (10 ),
1347+ WorkflowData : sdk.WorkflowData {
1348+ Node : sdk.Node {
1349+ Name : "root" ,
1350+ Type : sdk .NodeTypePipeline ,
1351+ Context : & sdk.NodeContext {
1352+ PipelineID : proj .Pipelines [0 ].ID ,
1353+ },
1354+ Triggers : []sdk.NodeTrigger {
1355+ {
1356+ ChildNode : sdk.Node {
1357+ Name : "child1" ,
1358+ Type : sdk .NodeTypePipeline ,
1359+ Context : & sdk.NodeContext {
1360+ PipelineID : proj .Pipelines [0 ].ID ,
1361+ ApplicationID : proj .Applications [1 ].ID ,
1362+ },
1363+ Triggers : []sdk.NodeTrigger {
1364+ {
1365+ ChildNode : sdk.Node {
1366+ Name : "child2" ,
1367+ Type : sdk .NodeTypePipeline ,
1368+ Context : & sdk.NodeContext {
1369+ PipelineID : proj .Pipelines [0 ].ID ,
1370+ ApplicationID : proj .Applications [0 ].ID ,
1371+ },
1372+ },
1373+ },
1374+ },
1375+ },
1376+ },
1377+ },
1378+ },
1379+ },
1380+ Applications : map [int64 ]sdk.Application {
1381+ proj .Applications [0 ].ID : proj .Applications [0 ],
1382+ proj .Applications [1 ].ID : proj .Applications [1 ],
1383+ },
1384+ Pipelines : map [int64 ]sdk.Pipeline {
1385+ proj .Pipelines [0 ].ID : proj .Pipelines [0 ],
1386+ },
1387+ }
1388+
1389+ assert .NoError (t , workflow .Insert (context .TODO (), db , cache , * proj , & w ))
1390+
1391+ // CREATE RUN
1392+ var manualEvent sdk.WorkflowNodeRunManual
1393+ manualEvent .Payload = map [string ]string {
1394+ "git.branch" : "feat/branch" ,
1395+ }
1396+
1397+ opts := & sdk.WorkflowRunPostHandlerOption {
1398+ Manual : & manualEvent ,
1399+ }
1400+ wr , err := workflow .CreateRun (db , & w , opts , u )
1401+ assert .NoError (t , err )
1402+ wr .Workflow = w
1403+
1404+ consumer , _ := authentication .LoadConsumerByTypeAndUserID (context .TODO (), db , sdk .ConsumerLocal , u .ID , authentication .LoadConsumerOptions .WithAuthentifiedUser )
1405+
1406+ _ , errR := workflow .StartWorkflowRun (context .TODO (), db , cache , * proj , wr , opts , consumer , nil )
1407+ assert .NoError (t , errR )
1408+
1409+ assert .Equal (t , 3 , len (wr .WorkflowNodeRuns ))
1410+ assert .Equal (t , 1 , len (wr .WorkflowNodeRuns [w .WorkflowData .Node .ID ]))
1411+
1412+ mapParams := sdk .ParametersToMap (wr .WorkflowNodeRuns [w .WorkflowData .Node .ID ][0 ].BuildParameters )
1413+ assert .Equal (t , "feat/branch" , mapParams ["git.branch" ])
1414+ assert .Equal (t , "" , mapParams ["git.hash" ])
1415+ assert .Equal (t , "" , mapParams ["git.author" ])
1416+ assert .Equal (t , "" , mapParams ["git.message" ])
1417+
1418+ mapParams2 := sdk .ParametersToMap (wr .WorkflowNodeRuns [w .WorkflowData .Node .Triggers [0 ].ChildNode .ID ][0 ].BuildParameters )
1419+ assert .Equal (t , "defaultBranch" , mapParams2 ["git.branch" ])
1420+ assert .Equal (t , "defaultCommit" , mapParams2 ["git.hash" ])
1421+ assert .Equal (t , "john.snow" , mapParams2 ["git.author" ])
1422+ assert .Equal (t , "super default commit" , mapParams2 ["git.message" ])
1423+ assert .Equal (t , "stash" , wr .WorkflowNodeRuns [w .WorkflowData .Node .Triggers [0 ].ChildNode .ID ][0 ].VCSServer )
1424+
1425+ mapParams3 := sdk .ParametersToMap (wr .WorkflowNodeRuns [w .WorkflowData .Node .Triggers [0 ].ChildNode .Triggers [0 ].ChildNode .ID ][0 ].BuildParameters )
1426+ assert .Equal (t , "defaultBranch" , mapParams3 ["git.branch" ])
1427+ assert .Equal (t , "mylastcommit" , mapParams3 ["git.hash" ])
1428+ assert .Equal (t , "steven.guiheux" , mapParams3 ["git.author" ])
1429+ assert .Equal (t , "super commit" , mapParams3 ["git.message" ])
1430+ assert .Equal (t , "defaultBranch" , mapParams3 ["workflow.child1.git.branch" ])
1431+ assert .Equal (t , "github" , wr .WorkflowNodeRuns [w .WorkflowData .Node .Triggers [0 ].ChildNode .Triggers [0 ].ChildNode .ID ][0 ].VCSServer )
1432+ }
1433+
11901434// Payload: branch only
11911435func TestGitParamOnPipelineWithoutApplication (t * testing.T ) {
11921436 db , cache , end := test .SetupPG (t , bootstrap .InitiliazeDB )
0 commit comments