github.com/pf-qiu/concourse/v6@v6.7.3-0.20201207032516-1f455d73275f/web/elm/tests/StepTreeTests.elm (about) 1 module StepTreeTests exposing 2 ( all 3 , initAggregate 4 , initAggregateNested 5 , initEnsure 6 , initGet 7 , initInParallel 8 , initInParallelNested 9 , initOnFailure 10 , initOnSuccess 11 , initPut 12 , initTask 13 , initTimeout 14 , initTry 15 ) 16 17 import Ansi.Log 18 import Array 19 import Build.StepTree.Models as Models 20 import Build.StepTree.StepTree as StepTree 21 import Concourse exposing (BuildStep(..), HookedPlan, JsonValue(..)) 22 import Dict exposing (Dict) 23 import Expect exposing (..) 24 import Routes 25 import Test exposing (..) 26 27 28 all : Test 29 all = 30 describe "StepTree" 31 [ initTask 32 , initSetPipeline 33 , initLoadVar 34 , initCheck 35 , initGet 36 , initPut 37 , initAggregate 38 , initAggregateNested 39 , initAcross 40 , initAcrossNested 41 , initAcrossWithDo 42 , initInParallel 43 , initInParallelNested 44 , initOnSuccess 45 , initOnFailure 46 , initEnsure 47 , initTry 48 , initTimeout 49 ] 50 51 52 someStep : Routes.StepID -> Models.StepName -> Models.StepState -> Models.Step 53 someStep = 54 someVersionedStep Nothing 55 56 57 someVersionedStep : Maybe Models.Version -> Routes.StepID -> Models.StepName -> Models.StepState -> Models.Step 58 someVersionedStep version id name state = 59 { id = id 60 , name = name 61 , state = state 62 , log = cookedLog 63 , error = Nothing 64 , expanded = False 65 , version = version 66 , metadata = [] 67 , changed = False 68 , timestamps = Dict.empty 69 , initialize = Nothing 70 , start = Nothing 71 , finish = Nothing 72 , tabFocus = Models.Auto 73 , expandedHeaders = Dict.empty 74 , initializationExpanded = False 75 , imageCheck = Nothing 76 , imageGet = Nothing 77 } 78 79 80 someExpandedStep : Routes.StepID -> Models.StepName -> Models.StepState -> Models.Step 81 someExpandedStep id name state = 82 someStep id name state |> (\s -> { s | expanded = True }) 83 84 85 emptyResources : Concourse.BuildResources 86 emptyResources = 87 { inputs = [], outputs = [] } 88 89 90 initTask : Test 91 initTask = 92 let 93 { tree, steps } = 94 StepTree.init Routes.HighlightNothing 95 emptyResources 96 { id = "some-id" 97 , step = BuildStepTask "some-name" 98 } 99 in 100 describe "init with Task" 101 [ test "the tree" <| 102 \_ -> 103 Expect.equal (Models.Task "some-id") tree 104 , test "the step" <| 105 \_ -> 106 assertSteps 107 [ ( "some-id", someStep "some-id" "some-name" Models.StepStatePending ) ] 108 steps 109 ] 110 111 112 initSetPipeline : Test 113 initSetPipeline = 114 let 115 { tree, steps } = 116 StepTree.init Routes.HighlightNothing 117 emptyResources 118 { id = "some-id" 119 , step = BuildStepSetPipeline "some-name" 120 } 121 in 122 describe "init with SetPipeline" 123 [ test "the tree" <| 124 \_ -> 125 Expect.equal (Models.SetPipeline "some-id") tree 126 , test "the steps" <| 127 \_ -> 128 assertSteps [ ( "some-id", someStep "some-id" "some-name" Models.StepStatePending ) ] steps 129 ] 130 131 132 initLoadVar : Test 133 initLoadVar = 134 let 135 { tree, steps } = 136 StepTree.init Routes.HighlightNothing 137 emptyResources 138 { id = "some-id" 139 , step = BuildStepLoadVar "some-name" 140 } 141 in 142 describe "init with LoadVar" 143 [ test "the tree" <| 144 \_ -> 145 Expect.equal (Models.LoadVar "some-id") tree 146 , test "the step" <| 147 \_ -> 148 assertSteps [ ( "some-id", someStep "some-id" "some-name" Models.StepStatePending ) ] steps 149 ] 150 151 152 initCheck : Test 153 initCheck = 154 let 155 { tree, steps } = 156 StepTree.init Routes.HighlightNothing 157 emptyResources 158 { id = "some-id" 159 , step = BuildStepCheck "some-name" 160 } 161 in 162 describe "init with Check" 163 [ test "the tree" <| 164 \_ -> 165 Expect.equal (Models.Check "some-id") tree 166 , test "the step" <| 167 \_ -> 168 assertSteps [ ( "some-id", someStep "some-id" "some-name" Models.StepStatePending ) ] steps 169 ] 170 171 172 initGet : Test 173 initGet = 174 let 175 version = 176 Dict.fromList [ ( "some", "version" ) ] 177 178 { tree, steps } = 179 StepTree.init Routes.HighlightNothing 180 emptyResources 181 { id = "some-id" 182 , step = BuildStepGet "some-name" (Just version) 183 } 184 in 185 describe "init with Get" 186 [ test "the tree" <| 187 \_ -> 188 Expect.equal (Models.Get "some-id") tree 189 , test "the step" <| 190 \_ -> 191 assertSteps [ ( "some-id", someVersionedStep (Just version) "some-id" "some-name" Models.StepStatePending ) ] steps 192 ] 193 194 195 initPut : Test 196 initPut = 197 let 198 { tree, steps } = 199 StepTree.init Routes.HighlightNothing 200 emptyResources 201 { id = "some-id" 202 , step = BuildStepPut "some-name" 203 } 204 in 205 describe "init with Put" 206 [ test "the tree" <| 207 \_ -> 208 Expect.equal (Models.Put "some-id") tree 209 , test "the step" <| 210 \_ -> 211 assertSteps [ ( "some-id", someStep "some-id" "some-name" Models.StepStatePending ) ] steps 212 ] 213 214 215 initAggregate : Test 216 initAggregate = 217 let 218 { tree, steps } = 219 StepTree.init Routes.HighlightNothing 220 emptyResources 221 { id = "aggregate-id" 222 , step = 223 BuildStepAggregate 224 << Array.fromList 225 <| 226 [ { id = "task-a-id", step = BuildStepTask "task-a" } 227 , { id = "task-b-id", step = BuildStepTask "task-b" } 228 ] 229 } 230 in 231 describe "init with Aggregate" 232 [ test "the tree" <| 233 \_ -> 234 Expect.equal 235 (Models.Aggregate 236 << Array.fromList 237 <| 238 [ Models.Task "task-a-id" 239 , Models.Task "task-b-id" 240 ] 241 ) 242 tree 243 , test "the steps" <| 244 \_ -> 245 assertSteps 246 [ ( "task-a-id", someStep "task-a-id" "task-a" Models.StepStatePending ) 247 , ( "task-b-id", someStep "task-b-id" "task-b" Models.StepStatePending ) 248 ] 249 steps 250 ] 251 252 253 initAggregateNested : Test 254 initAggregateNested = 255 let 256 { tree, steps } = 257 StepTree.init Routes.HighlightNothing 258 emptyResources 259 { id = "aggregate-id" 260 , step = 261 BuildStepAggregate 262 << Array.fromList 263 <| 264 [ { id = "task-a-id", step = BuildStepTask "task-a" } 265 , { id = "task-b-id", step = BuildStepTask "task-b" } 266 , { id = "nested-aggregate-id" 267 , step = 268 BuildStepAggregate 269 << Array.fromList 270 <| 271 [ { id = "task-c-id", step = BuildStepTask "task-c" } 272 , { id = "task-d-id", step = BuildStepTask "task-d" } 273 ] 274 } 275 ] 276 } 277 in 278 describe "init with Aggregate nested" 279 [ test "the tree" <| 280 \_ -> 281 Expect.equal 282 (Models.Aggregate 283 << Array.fromList 284 <| 285 [ Models.Task "task-a-id" 286 , Models.Task "task-b-id" 287 , Models.Aggregate 288 << Array.fromList 289 <| 290 [ Models.Task "task-c-id" 291 , Models.Task "task-d-id" 292 ] 293 ] 294 ) 295 tree 296 , test "the steps" <| 297 \_ -> 298 assertSteps 299 [ ( "task-a-id", someStep "task-a-id" "task-a" Models.StepStatePending ) 300 , ( "task-b-id", someStep "task-b-id" "task-b" Models.StepStatePending ) 301 , ( "task-c-id", someStep "task-c-id" "task-c" Models.StepStatePending ) 302 , ( "task-d-id", someStep "task-d-id" "task-d" Models.StepStatePending ) 303 ] 304 steps 305 ] 306 307 308 initAcross : Test 309 initAcross = 310 let 311 { tree, steps } = 312 StepTree.init Routes.HighlightNothing 313 emptyResources 314 { id = "across-id" 315 , step = 316 BuildStepAcross 317 { vars = [ "var" ] 318 , steps = 319 [ ( [ JsonString "v1" ] 320 , { id = "task-a-id", step = BuildStepTask "task-a" } 321 ) 322 , ( [ JsonString "v2" ] 323 , { id = "task-b-id", step = BuildStepTask "task-b" } 324 ) 325 ] 326 } 327 } 328 in 329 describe "init with Across" 330 [ test "the tree" <| 331 \_ -> 332 Expect.equal 333 (Models.Across "across-id" 334 [ "var" ] 335 [ [ JsonString "v1" ], [ JsonString "v2" ] ] 336 << Array.fromList 337 <| 338 [ Models.Task "task-a-id" 339 , Models.Task "task-b-id" 340 ] 341 ) 342 tree 343 , test "the steps" <| 344 \_ -> 345 assertSteps 346 [ ( "across-id", someStep "across-id" "var" Models.StepStatePending ) 347 , ( "task-a-id", someExpandedStep "task-a-id" "task-a" Models.StepStatePending ) 348 , ( "task-b-id", someExpandedStep "task-b-id" "task-b" Models.StepStatePending ) 349 ] 350 steps 351 ] 352 353 354 initAcrossNested : Test 355 initAcrossNested = 356 let 357 { tree, steps } = 358 StepTree.init Routes.HighlightNothing 359 emptyResources 360 { id = "across-id" 361 , step = 362 BuildStepAcross 363 { vars = [ "var1" ] 364 , steps = 365 [ ( [ JsonString "a1" ] 366 , { id = "nested-across-id" 367 , step = 368 BuildStepAcross 369 { vars = [ "var2" ] 370 , steps = 371 [ ( [ JsonString "b1" ] 372 , { id = "task-a-id", step = BuildStepTask "task-a" } 373 ) 374 , ( [ JsonString "b2" ] 375 , { id = "task-b-id", step = BuildStepTask "task-b" } 376 ) 377 ] 378 } 379 } 380 ) 381 ] 382 } 383 } 384 in 385 describe "init with nested Across" 386 [ test "the tree" <| 387 \_ -> 388 Expect.equal 389 (Models.Across "across-id" 390 [ "var1" ] 391 [ [ JsonString "a1" ] ] 392 << Array.fromList 393 <| 394 [ Models.Across "nested-across-id" 395 [ "var2" ] 396 [ [ JsonString "b1" ], [ JsonString "b2" ] ] 397 << Array.fromList 398 <| 399 [ Models.Task "task-a-id" 400 , Models.Task "task-b-id" 401 ] 402 ] 403 ) 404 tree 405 , test "the steps" <| 406 \_ -> 407 assertSteps 408 [ ( "across-id", someStep "across-id" "var1" Models.StepStatePending ) 409 , ( "nested-across-id", someExpandedStep "nested-across-id" "var2" Models.StepStatePending ) 410 , ( "task-a-id", someExpandedStep "task-a-id" "task-a" Models.StepStatePending ) 411 , ( "task-b-id", someExpandedStep "task-b-id" "task-b" Models.StepStatePending ) 412 ] 413 steps 414 ] 415 416 417 initAcrossWithDo : Test 418 initAcrossWithDo = 419 let 420 { tree, steps } = 421 StepTree.init Routes.HighlightNothing 422 emptyResources 423 { id = "across-id" 424 , step = 425 BuildStepAcross 426 { vars = [ "var" ] 427 , steps = 428 [ ( [ JsonString "v1" ] 429 , { id = "do-id" 430 , step = 431 BuildStepDo <| 432 Array.fromList 433 [ { id = "task-a-id", step = BuildStepTask "task-a" } 434 , { id = "task-b-id", step = BuildStepTask "task-b" } 435 ] 436 } 437 ) 438 ] 439 } 440 } 441 in 442 describe "init Across with Do substep" 443 [ test "does not expand substeps" <| 444 \_ -> 445 Expect.equal 446 (Models.Across "across-id" 447 [ "var" ] 448 [ [ JsonString "v1" ] ] 449 << Array.fromList 450 <| 451 [ Models.Do <| 452 Array.fromList 453 [ Models.Task "task-a-id" 454 , Models.Task "task-b-id" 455 ] 456 ] 457 ) 458 tree 459 , test "the steps" <| 460 \_ -> 461 assertSteps 462 [ ( "across-id", someStep "across-id" "var" Models.StepStatePending ) 463 , ( "task-a-id", someStep "task-a-id" "task-a" Models.StepStatePending ) 464 , ( "task-b-id", someStep "task-b-id" "task-b" Models.StepStatePending ) 465 ] 466 steps 467 ] 468 469 470 initInParallel : Test 471 initInParallel = 472 let 473 { tree, steps } = 474 StepTree.init Routes.HighlightNothing 475 emptyResources 476 { id = "parallel-id" 477 , step = 478 BuildStepInParallel 479 << Array.fromList 480 <| 481 [ { id = "task-a-id", step = BuildStepTask "task-a" } 482 , { id = "task-b-id", step = BuildStepTask "task-b" } 483 ] 484 } 485 in 486 describe "init with Parallel" 487 [ test "the tree" <| 488 \_ -> 489 Expect.equal 490 (Models.InParallel 491 << Array.fromList 492 <| 493 [ Models.Task "task-a-id" 494 , Models.Task "task-b-id" 495 ] 496 ) 497 tree 498 , test "the steps" <| 499 \_ -> 500 assertSteps 501 [ ( "task-a-id", someStep "task-a-id" "task-a" Models.StepStatePending ) 502 , ( "task-b-id", someStep "task-b-id" "task-b" Models.StepStatePending ) 503 ] 504 steps 505 ] 506 507 508 initInParallelNested : Test 509 initInParallelNested = 510 let 511 { tree, steps } = 512 StepTree.init Routes.HighlightNothing 513 emptyResources 514 { id = "parallel-id" 515 , step = 516 BuildStepInParallel 517 << Array.fromList 518 <| 519 [ { id = "task-a-id", step = BuildStepTask "task-a" } 520 , { id = "task-b-id", step = BuildStepTask "task-b" } 521 , { id = "nested-parallel-id" 522 , step = 523 BuildStepInParallel 524 << Array.fromList 525 <| 526 [ { id = "task-c-id", step = BuildStepTask "task-c" } 527 , { id = "task-d-id", step = BuildStepTask "task-d" } 528 ] 529 } 530 ] 531 } 532 in 533 describe "init with Parallel nested" 534 [ test "the tree" <| 535 \_ -> 536 Expect.equal 537 (Models.InParallel 538 << Array.fromList 539 <| 540 [ Models.Task "task-a-id" 541 , Models.Task "task-b-id" 542 , Models.InParallel 543 << Array.fromList 544 <| 545 [ Models.Task "task-c-id" 546 , Models.Task "task-d-id" 547 ] 548 ] 549 ) 550 tree 551 , test "the steps" <| 552 \_ -> 553 assertSteps 554 [ ( "task-a-id", someStep "task-a-id" "task-a" Models.StepStatePending ) 555 , ( "task-b-id", someStep "task-b-id" "task-b" Models.StepStatePending ) 556 , ( "task-c-id", someStep "task-c-id" "task-c" Models.StepStatePending ) 557 , ( "task-d-id", someStep "task-d-id" "task-d" Models.StepStatePending ) 558 ] 559 steps 560 ] 561 562 563 initOnSuccess : Test 564 initOnSuccess = 565 let 566 { tree, steps } = 567 StepTree.init Routes.HighlightNothing 568 emptyResources 569 { id = "on-success-id" 570 , step = 571 BuildStepOnSuccess <| 572 HookedPlan 573 { id = "task-a-id", step = BuildStepTask "task-a" } 574 { id = "task-b-id", step = BuildStepTask "task-b" } 575 } 576 in 577 describe "init with OnSuccess" 578 [ test "the tree" <| 579 \_ -> 580 Expect.equal 581 (Models.OnSuccess <| 582 Models.HookedStep 583 (Models.Task "task-a-id") 584 (Models.Task "task-b-id") 585 ) 586 tree 587 , test "the steps" <| 588 \_ -> 589 assertSteps 590 [ ( "task-a-id", someStep "task-a-id" "task-a" Models.StepStatePending ) 591 , ( "task-b-id", someStep "task-b-id" "task-b" Models.StepStatePending ) 592 ] 593 steps 594 ] 595 596 597 initOnFailure : Test 598 initOnFailure = 599 let 600 { tree, steps } = 601 StepTree.init Routes.HighlightNothing 602 emptyResources 603 { id = "on-success-id" 604 , step = 605 BuildStepOnFailure <| 606 HookedPlan 607 { id = "task-a-id", step = BuildStepTask "task-a" } 608 { id = "task-b-id", step = BuildStepTask "task-b" } 609 } 610 in 611 describe "init with OnFailure" 612 [ test "the tree" <| 613 \_ -> 614 Expect.equal 615 (Models.OnFailure <| 616 Models.HookedStep 617 (Models.Task "task-a-id") 618 (Models.Task "task-b-id") 619 ) 620 tree 621 , test "the steps" <| 622 \_ -> 623 assertSteps 624 [ ( "task-a-id", someStep "task-a-id" "task-a" Models.StepStatePending ) 625 , ( "task-b-id", someStep "task-b-id" "task-b" Models.StepStatePending ) 626 ] 627 steps 628 ] 629 630 631 initEnsure : Test 632 initEnsure = 633 let 634 { tree, steps } = 635 StepTree.init Routes.HighlightNothing 636 emptyResources 637 { id = "on-success-id" 638 , step = 639 BuildStepEnsure <| 640 HookedPlan 641 { id = "task-a-id", step = BuildStepTask "task-a" } 642 { id = "task-b-id", step = BuildStepTask "task-b" } 643 } 644 in 645 describe "init with Ensure" 646 [ test "the tree" <| 647 \_ -> 648 Expect.equal 649 (Models.Ensure <| 650 Models.HookedStep 651 (Models.Task "task-a-id") 652 (Models.Task "task-b-id") 653 ) 654 tree 655 , test "the steps" <| 656 \_ -> 657 assertSteps 658 [ ( "task-a-id", someStep "task-a-id" "task-a" Models.StepStatePending ) 659 , ( "task-b-id", someStep "task-b-id" "task-b" Models.StepStatePending ) 660 ] 661 steps 662 ] 663 664 665 initTry : Test 666 initTry = 667 let 668 { tree, steps } = 669 StepTree.init Routes.HighlightNothing 670 emptyResources 671 { id = "on-success-id" 672 , step = 673 BuildStepTry { id = "task-a-id", step = BuildStepTask "task-a" } 674 } 675 in 676 describe "init with Try" 677 [ test "the tree" <| 678 \_ -> 679 Expect.equal 680 (Models.Try <| 681 Models.Task "task-a-id" 682 ) 683 tree 684 , test "the steps" <| 685 \_ -> 686 assertSteps 687 [ ( "task-a-id", someStep "task-a-id" "task-a" Models.StepStatePending ) 688 ] 689 steps 690 ] 691 692 693 initTimeout : Test 694 initTimeout = 695 let 696 { tree, steps } = 697 StepTree.init Routes.HighlightNothing 698 emptyResources 699 { id = "on-success-id" 700 , step = 701 BuildStepTimeout { id = "task-a-id", step = BuildStepTask "task-a" } 702 } 703 in 704 describe "init with Timeout" 705 [ test "the tree" <| 706 \_ -> 707 Expect.equal 708 (Models.Timeout <| 709 Models.Task "task-a-id" 710 ) 711 tree 712 , test "the steps" <| 713 \_ -> 714 assertSteps 715 [ ( "task-a-id", someStep "task-a-id" "task-a" Models.StepStatePending ) 716 ] 717 steps 718 ] 719 720 721 assertSteps : List ( Routes.StepID, Models.Step ) -> Dict Routes.StepID Models.Step -> Expectation 722 assertSteps expected actual = 723 Expect.equalDicts (Dict.fromList expected) actual 724 725 726 cookedLog : Ansi.Log.Model 727 cookedLog = 728 Ansi.Log.init Ansi.Log.Cooked