@dash0/sdk-web 0.20.0 → 0.22.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/README.md +12 -0
  2. package/dist/dash0.iife.js +1 -1
  3. package/dist/dash0.iife.js.map +1 -1
  4. package/dist/dash0.js +1 -1
  5. package/dist/dash0.js.map +1 -1
  6. package/dist/dash0.umd.cjs +1 -1
  7. package/dist/dash0.umd.cjs.map +1 -1
  8. package/dist/modules/api/browser-env.js +33 -0
  9. package/dist/modules/api/init.js +23 -18
  10. package/dist/modules/api/init_test.js +272 -1
  11. package/dist/modules/api/vcs.js +190 -0
  12. package/dist/modules/semantic-conventions.js +8 -0
  13. package/dist/modules/transport/index.js +4 -0
  14. package/dist/modules/utils/index.js +1 -0
  15. package/dist/modules/utils/session-sampling.js +16 -0
  16. package/dist/modules/utils/session-sampling_test.js +72 -0
  17. package/dist/modules/vars.js +1 -0
  18. package/dist/tsconfig.tsbuildinfo +1 -1
  19. package/dist/types/api/browser-env.d.ts +54 -0
  20. package/dist/types/api/vcs.d.ts +10 -0
  21. package/dist/types/semantic-conventions.d.ts +7 -0
  22. package/dist/types/types/options.d.ts +62 -0
  23. package/dist/types/utils/index.d.ts +1 -0
  24. package/dist/types/utils/session-sampling.d.ts +9 -0
  25. package/dist/types/utils/session-sampling_test.d.ts +1 -0
  26. package/dist/types/vars.d.ts +5 -0
  27. package/package.json +1 -1
  28. package/src/api/browser-env.ts +94 -0
  29. package/src/api/init.ts +62 -20
  30. package/src/api/init_test.ts +357 -1
  31. package/src/api/vcs.ts +328 -0
  32. package/src/semantic-conventions.ts +9 -0
  33. package/src/transport/index.ts +3 -0
  34. package/src/types/options.ts +66 -0
  35. package/src/utils/index.ts +1 -0
  36. package/src/utils/session-sampling.ts +15 -0
  37. package/src/utils/session-sampling_test.ts +83 -0
  38. package/src/vars.ts +7 -0
@@ -1,7 +1,20 @@
1
1
  import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
2
2
  import { InitOptions, InstrumentationName } from "../types/options";
3
3
  import { PropagatorConfig, Vars } from "../vars";
4
- import { SERVICE_NAME, SERVICE_NAMESPACE } from "../semantic-conventions";
4
+ import {
5
+ DEPLOYMENT_ENVIRONMENT_NAME,
6
+ DEPLOYMENT_ID,
7
+ DEPLOYMENT_NAME,
8
+ SERVICE_NAME,
9
+ SERVICE_NAMESPACE,
10
+ VCS_CHANGE_ID,
11
+ VCS_OWNER_NAME,
12
+ VCS_PROVIDER_NAME,
13
+ VCS_REF_HEAD_NAME,
14
+ VCS_REF_HEAD_REVISION,
15
+ VCS_REPOSITORY_NAME,
16
+ VCS_REPOSITORY_URL_FULL,
17
+ } from "../semantic-conventions";
5
18
  import { init as initFun } from "./init";
6
19
 
7
20
  // Mock all the instrumentation modules
@@ -397,4 +410,347 @@ describe("init", () => {
397
410
  expect(serviceNameAttr?.value.stringValue).toBe("unknown");
398
411
  });
399
412
  });
413
+
414
+ describe("vcs auto-detection", () => {
415
+ afterEach(() => {
416
+ vi.unstubAllEnvs();
417
+ });
418
+
419
+ const stringAttr = (key: string) => vars.resource.attributes.find((attr) => attr.key === key)?.value.stringValue;
420
+
421
+ it("derives full vcs resource attributes from Vercel env vars", () => {
422
+ vi.stubEnv("NEXT_PUBLIC_VERCEL_GIT_PROVIDER", "github");
423
+ vi.stubEnv("NEXT_PUBLIC_VERCEL_GIT_REPO_OWNER", "dash0hq");
424
+ vi.stubEnv("NEXT_PUBLIC_VERCEL_GIT_REPO_SLUG", "dash0");
425
+ vi.stubEnv("NEXT_PUBLIC_VERCEL_GIT_COMMIT_REF", "main");
426
+ vi.stubEnv("NEXT_PUBLIC_VERCEL_GIT_COMMIT_SHA", "abc123");
427
+ vi.stubEnv("NEXT_PUBLIC_VERCEL_GIT_PULL_REQUEST_ID", "42");
428
+
429
+ init(baseOptions);
430
+
431
+ expect(stringAttr(VCS_PROVIDER_NAME)).toBe("github");
432
+ expect(stringAttr(VCS_OWNER_NAME)).toBe("dash0hq");
433
+ expect(stringAttr(VCS_REPOSITORY_NAME)).toBe("dash0");
434
+ expect(stringAttr(VCS_REPOSITORY_URL_FULL)).toBe("https://github.com/dash0hq/dash0");
435
+ expect(stringAttr(VCS_REF_HEAD_NAME)).toBe("main");
436
+ expect(stringAttr(VCS_REF_HEAD_REVISION)).toBe("abc123");
437
+ expect(stringAttr(VCS_CHANGE_ID)).toBe("42");
438
+ });
439
+
440
+ // The 9 framework prefixes Vercel auto-prefixes its VERCEL_GIT_* system
441
+ // vars under (per https://vercel.com/docs/environment-variables/framework-environment-variables).
442
+ // A passing test for each confirms the literal-accessor enumeration in
443
+ // detectVcsFromVercel is actually wired up.
444
+ const FRAMEWORK_PREFIX_SAMPLES: Array<[label: string, prefix: string]> = [
445
+ ["Next.js", "NEXT_PUBLIC_"],
446
+ ["Nuxt 3", "NUXT_PUBLIC_"],
447
+ ["Nuxt 2", "NUXT_ENV_"],
448
+ ["Create React App", "REACT_APP_"],
449
+ ["Gatsby", "GATSBY_"],
450
+ ["Vite", "VITE_"],
451
+ ["Astro / SvelteKit / Hydrogen", "PUBLIC_"],
452
+ ["Vue CLI", "VUE_APP_"],
453
+ ["RedwoodJS", "REDWOOD_ENV_"],
454
+ ["Sanity Studio", "SANITY_STUDIO_"],
455
+ ];
456
+
457
+ it.each(FRAMEWORK_PREFIX_SAMPLES)(
458
+ "derives Vercel vcs attributes from %s framework prefix (%s)",
459
+ (_label, prefix) => {
460
+ vi.stubEnv(`${prefix}VERCEL_GIT_PROVIDER`, "github");
461
+ vi.stubEnv(`${prefix}VERCEL_GIT_REPO_OWNER`, "dash0hq");
462
+ vi.stubEnv(`${prefix}VERCEL_GIT_REPO_SLUG`, "dash0");
463
+ vi.stubEnv(`${prefix}VERCEL_GIT_COMMIT_REF`, "main");
464
+ vi.stubEnv(`${prefix}VERCEL_GIT_COMMIT_SHA`, "abc123");
465
+ vi.stubEnv(`${prefix}VERCEL_GIT_PULL_REQUEST_ID`, "42");
466
+
467
+ init(baseOptions);
468
+
469
+ expect(stringAttr(VCS_PROVIDER_NAME)).toBe("github");
470
+ expect(stringAttr(VCS_OWNER_NAME)).toBe("dash0hq");
471
+ expect(stringAttr(VCS_REPOSITORY_NAME)).toBe("dash0");
472
+ expect(stringAttr(VCS_REPOSITORY_URL_FULL)).toBe("https://github.com/dash0hq/dash0");
473
+ expect(stringAttr(VCS_REF_HEAD_NAME)).toBe("main");
474
+ expect(stringAttr(VCS_REF_HEAD_REVISION)).toBe("abc123");
475
+ expect(stringAttr(VCS_CHANGE_ID)).toBe("42");
476
+ }
477
+ );
478
+
479
+ it.each(FRAMEWORK_PREFIX_SAMPLES)(
480
+ "derives Netlify vcs attributes from %s framework prefix (%s)",
481
+ (_label, prefix) => {
482
+ vi.stubEnv(`${prefix}REPOSITORY_URL`, "https://github.com/dash0hq/dash0");
483
+ vi.stubEnv(`${prefix}BRANCH`, "feature/x");
484
+ vi.stubEnv(`${prefix}COMMIT_REF`, "def456");
485
+ vi.stubEnv(`${prefix}REVIEW_ID`, "99");
486
+
487
+ init(baseOptions);
488
+
489
+ expect(stringAttr(VCS_PROVIDER_NAME)).toBe("github");
490
+ expect(stringAttr(VCS_OWNER_NAME)).toBe("dash0hq");
491
+ expect(stringAttr(VCS_REPOSITORY_NAME)).toBe("dash0");
492
+ expect(stringAttr(VCS_REF_HEAD_NAME)).toBe("feature/x");
493
+ expect(stringAttr(VCS_REF_HEAD_REVISION)).toBe("def456");
494
+ expect(stringAttr(VCS_CHANGE_ID)).toBe("99");
495
+ }
496
+ );
497
+
498
+ it("derives vcs resource attributes from Netlify env vars (parsed REPOSITORY_URL)", () => {
499
+ vi.stubEnv("NEXT_PUBLIC_REPOSITORY_URL", "https://github.com/dash0hq/dash0.git");
500
+ vi.stubEnv("NEXT_PUBLIC_BRANCH", "feature/x");
501
+ vi.stubEnv("NEXT_PUBLIC_COMMIT_REF", "def456");
502
+ vi.stubEnv("NEXT_PUBLIC_REVIEW_ID", "99");
503
+
504
+ init(baseOptions);
505
+
506
+ expect(stringAttr(VCS_PROVIDER_NAME)).toBe("github");
507
+ expect(stringAttr(VCS_OWNER_NAME)).toBe("dash0hq");
508
+ expect(stringAttr(VCS_REPOSITORY_NAME)).toBe("dash0");
509
+ expect(stringAttr(VCS_REPOSITORY_URL_FULL)).toBe("https://github.com/dash0hq/dash0.git");
510
+ expect(stringAttr(VCS_REF_HEAD_NAME)).toBe("feature/x");
511
+ expect(stringAttr(VCS_REF_HEAD_REVISION)).toBe("def456");
512
+ expect(stringAttr(VCS_CHANGE_ID)).toBe("99");
513
+ });
514
+
515
+ it("prefers Vercel values over Netlify values when both are present", () => {
516
+ vi.stubEnv("NEXT_PUBLIC_VERCEL_GIT_PROVIDER", "github");
517
+ vi.stubEnv("NEXT_PUBLIC_VERCEL_GIT_REPO_OWNER", "vercel-owner");
518
+ vi.stubEnv("NEXT_PUBLIC_VERCEL_GIT_REPO_SLUG", "vercel-repo");
519
+ vi.stubEnv("NEXT_PUBLIC_VERCEL_GIT_COMMIT_REF", "vercel-branch");
520
+ vi.stubEnv("NEXT_PUBLIC_REPOSITORY_URL", "https://github.com/netlify-owner/netlify-repo");
521
+ vi.stubEnv("NEXT_PUBLIC_BRANCH", "netlify-branch");
522
+
523
+ init(baseOptions);
524
+
525
+ expect(stringAttr(VCS_OWNER_NAME)).toBe("vercel-owner");
526
+ expect(stringAttr(VCS_REPOSITORY_NAME)).toBe("vercel-repo");
527
+ expect(stringAttr(VCS_REF_HEAD_NAME)).toBe("vercel-branch");
528
+ });
529
+
530
+ it("opts.vcs overrides individual auto-detected fields", () => {
531
+ vi.stubEnv("NEXT_PUBLIC_VERCEL_GIT_PROVIDER", "github");
532
+ vi.stubEnv("NEXT_PUBLIC_VERCEL_GIT_REPO_OWNER", "dash0hq");
533
+ vi.stubEnv("NEXT_PUBLIC_VERCEL_GIT_REPO_SLUG", "dash0");
534
+ vi.stubEnv("NEXT_PUBLIC_VERCEL_GIT_COMMIT_REF", "main");
535
+
536
+ init({
537
+ ...baseOptions,
538
+ vcs: {
539
+ refHeadName: "release/2026.06",
540
+ changeId: "1234",
541
+ },
542
+ });
543
+
544
+ expect(stringAttr(VCS_OWNER_NAME)).toBe("dash0hq");
545
+ expect(stringAttr(VCS_REF_HEAD_NAME)).toBe("release/2026.06");
546
+ expect(stringAttr(VCS_CHANGE_ID)).toBe("1234");
547
+ });
548
+
549
+ it("disableVcsDetection: true emits no vcs.* resource attributes even when env vars are set", () => {
550
+ vi.stubEnv("NEXT_PUBLIC_VERCEL_GIT_PROVIDER", "github");
551
+ vi.stubEnv("NEXT_PUBLIC_VERCEL_GIT_REPO_OWNER", "dash0hq");
552
+ vi.stubEnv("NEXT_PUBLIC_VERCEL_GIT_COMMIT_SHA", "abc123");
553
+
554
+ init({ ...baseOptions, disableVcsDetection: true });
555
+
556
+ expect(stringAttr(VCS_PROVIDER_NAME)).toBeUndefined();
557
+ expect(stringAttr(VCS_OWNER_NAME)).toBeUndefined();
558
+ expect(stringAttr(VCS_REF_HEAD_REVISION)).toBeUndefined();
559
+ });
560
+
561
+ it("disableVcsDetection: true still applies opts.vcs manual overrides", () => {
562
+ vi.stubEnv("NEXT_PUBLIC_VERCEL_GIT_PROVIDER", "github");
563
+ vi.stubEnv("NEXT_PUBLIC_VERCEL_GIT_REPO_OWNER", "dash0hq");
564
+
565
+ init({
566
+ ...baseOptions,
567
+ disableVcsDetection: true,
568
+ vcs: { providerName: "gitlab", refHeadName: "release/1.0" },
569
+ });
570
+
571
+ // env-var values are suppressed
572
+ expect(stringAttr(VCS_OWNER_NAME)).toBeUndefined();
573
+ // manual overrides still win
574
+ expect(stringAttr(VCS_PROVIDER_NAME)).toBe("gitlab");
575
+ expect(stringAttr(VCS_REF_HEAD_NAME)).toBe("release/1.0");
576
+ });
577
+
578
+ it("applies opts.vcs fields as the sole source when no env vars are set", () => {
579
+ init({
580
+ ...baseOptions,
581
+ vcs: {
582
+ providerName: "github",
583
+ ownerName: "my-org",
584
+ repositoryName: "my-repo",
585
+ repositoryUrlFull: "https://github.com/my-org/my-repo",
586
+ refHeadName: "main",
587
+ refHeadRevision: "deadbeef",
588
+ changeId: "7",
589
+ },
590
+ });
591
+
592
+ expect(stringAttr(VCS_PROVIDER_NAME)).toBe("github");
593
+ expect(stringAttr(VCS_OWNER_NAME)).toBe("my-org");
594
+ expect(stringAttr(VCS_REPOSITORY_NAME)).toBe("my-repo");
595
+ expect(stringAttr(VCS_REPOSITORY_URL_FULL)).toBe("https://github.com/my-org/my-repo");
596
+ expect(stringAttr(VCS_REF_HEAD_NAME)).toBe("main");
597
+ expect(stringAttr(VCS_REF_HEAD_REVISION)).toBe("deadbeef");
598
+ expect(stringAttr(VCS_CHANGE_ID)).toBe("7");
599
+ });
600
+
601
+ it("emits nothing when no env vars and no opts.vcs are provided", () => {
602
+ init(baseOptions);
603
+
604
+ expect(stringAttr(VCS_PROVIDER_NAME)).toBeUndefined();
605
+ expect(stringAttr(VCS_OWNER_NAME)).toBeUndefined();
606
+ expect(stringAttr(VCS_REPOSITORY_NAME)).toBeUndefined();
607
+ expect(stringAttr(VCS_REPOSITORY_URL_FULL)).toBeUndefined();
608
+ expect(stringAttr(VCS_REF_HEAD_NAME)).toBeUndefined();
609
+ expect(stringAttr(VCS_REF_HEAD_REVISION)).toBeUndefined();
610
+ expect(stringAttr(VCS_CHANGE_ID)).toBeUndefined();
611
+ });
612
+
613
+ it("emits only the partial attributes that are available", () => {
614
+ vi.stubEnv("NEXT_PUBLIC_VERCEL_GIT_COMMIT_SHA", "abc123");
615
+ vi.stubEnv("NEXT_PUBLIC_VERCEL_GIT_COMMIT_REF", "main");
616
+
617
+ init(baseOptions);
618
+
619
+ expect(stringAttr(VCS_REF_HEAD_NAME)).toBe("main");
620
+ expect(stringAttr(VCS_REF_HEAD_REVISION)).toBe("abc123");
621
+ expect(stringAttr(VCS_REPOSITORY_URL_FULL)).toBeUndefined();
622
+ expect(stringAttr(VCS_PROVIDER_NAME)).toBeUndefined();
623
+ });
624
+
625
+ it("does not derive repository URL when provider is unknown", () => {
626
+ vi.stubEnv("NEXT_PUBLIC_VERCEL_GIT_PROVIDER", "someproprietary");
627
+ vi.stubEnv("NEXT_PUBLIC_VERCEL_GIT_REPO_OWNER", "owner");
628
+ vi.stubEnv("NEXT_PUBLIC_VERCEL_GIT_REPO_SLUG", "repo");
629
+
630
+ init(baseOptions);
631
+
632
+ expect(stringAttr(VCS_PROVIDER_NAME)).toBe("someproprietary");
633
+ expect(stringAttr(VCS_OWNER_NAME)).toBe("owner");
634
+ expect(stringAttr(VCS_REPOSITORY_NAME)).toBe("repo");
635
+ expect(stringAttr(VCS_REPOSITORY_URL_FULL)).toBeUndefined();
636
+ });
637
+
638
+ it("accepts gist.github.com as a github host alias", () => {
639
+ vi.stubEnv("NEXT_PUBLIC_REPOSITORY_URL", "https://gist.github.com/owner/abc123");
640
+
641
+ init(baseOptions);
642
+
643
+ expect(stringAttr(VCS_PROVIDER_NAME)).toBe("github");
644
+ expect(stringAttr(VCS_OWNER_NAME)).toBe("owner");
645
+ });
646
+
647
+ it("rejects arbitrary github.com subdomains", () => {
648
+ vi.stubEnv("NEXT_PUBLIC_REPOSITORY_URL", "https://evil.github.com/attacker/repo");
649
+
650
+ init(baseOptions);
651
+
652
+ expect(stringAttr(VCS_PROVIDER_NAME)).toBeUndefined();
653
+ expect(stringAttr(VCS_OWNER_NAME)).toBeUndefined();
654
+ expect(stringAttr(VCS_REPOSITORY_NAME)).toBeUndefined();
655
+ });
656
+
657
+ it("ignores a Netlify REPOSITORY_URL on an unknown host", () => {
658
+ vi.stubEnv("NEXT_PUBLIC_REPOSITORY_URL", "https://internal-git.example.com/team/app");
659
+ vi.stubEnv("NEXT_PUBLIC_BRANCH", "main");
660
+
661
+ init(baseOptions);
662
+
663
+ expect(stringAttr(VCS_PROVIDER_NAME)).toBeUndefined();
664
+ expect(stringAttr(VCS_OWNER_NAME)).toBeUndefined();
665
+ expect(stringAttr(VCS_REPOSITORY_NAME)).toBeUndefined();
666
+ expect(stringAttr(VCS_REPOSITORY_URL_FULL)).toBe("https://internal-git.example.com/team/app");
667
+ expect(stringAttr(VCS_REF_HEAD_NAME)).toBe("main");
668
+ });
669
+
670
+ it("parses GitLab nested-group repository URLs to the last path segment", () => {
671
+ vi.stubEnv("NEXT_PUBLIC_REPOSITORY_URL", "https://gitlab.com/group/subgroup/app.git");
672
+
673
+ init(baseOptions);
674
+
675
+ expect(stringAttr(VCS_PROVIDER_NAME)).toBe("gitlab");
676
+ expect(stringAttr(VCS_OWNER_NAME)).toBe("group");
677
+ expect(stringAttr(VCS_REPOSITORY_NAME)).toBe("app");
678
+ });
679
+
680
+ it("ignores a malformed REPOSITORY_URL", () => {
681
+ vi.stubEnv("NEXT_PUBLIC_REPOSITORY_URL", "not-a-url");
682
+
683
+ init(baseOptions);
684
+
685
+ expect(stringAttr(VCS_REPOSITORY_URL_FULL)).toBe("not-a-url");
686
+ expect(stringAttr(VCS_PROVIDER_NAME)).toBeUndefined();
687
+ expect(stringAttr(VCS_OWNER_NAME)).toBeUndefined();
688
+ expect(stringAttr(VCS_REPOSITORY_NAME)).toBeUndefined();
689
+ });
690
+ });
691
+
692
+ describe("environment + deployment auto-detection", () => {
693
+ afterEach(() => {
694
+ vi.unstubAllEnvs();
695
+ });
696
+
697
+ const stringAttr = (key: string) => vars.resource.attributes.find((attr) => attr.key === key)?.value.stringValue;
698
+
699
+ // The 9 framework prefixes Vercel auto-prefixes its `VERCEL_*` system
700
+ // vars under (per https://vercel.com/docs/environment-variables/framework-environment-variables).
701
+ // Same matrix the VCS detection uses, sourced from the shared
702
+ // `FrameworkPrefix` union in `./browser-env`.
703
+ const FRAMEWORK_PREFIX_SAMPLES: Array<[label: string, prefix: string]> = [
704
+ ["Next.js", "NEXT_PUBLIC_"],
705
+ ["Nuxt 3", "NUXT_PUBLIC_"],
706
+ ["Nuxt 2", "NUXT_ENV_"],
707
+ ["Create React App", "REACT_APP_"],
708
+ ["Gatsby", "GATSBY_"],
709
+ ["Vite", "VITE_"],
710
+ ["Astro / SvelteKit / Hydrogen", "PUBLIC_"],
711
+ ["Vue CLI", "VUE_APP_"],
712
+ ["RedwoodJS", "REDWOOD_ENV_"],
713
+ ["Sanity Studio", "SANITY_STUDIO_"],
714
+ ];
715
+
716
+ it.each(FRAMEWORK_PREFIX_SAMPLES)(
717
+ "derives environment + deployment resource attributes from %s framework prefix (%s)",
718
+ (_label, prefix) => {
719
+ vi.stubEnv(`${prefix}VERCEL_ENV`, "production");
720
+ vi.stubEnv(`${prefix}VERCEL_TARGET_ENV`, "production");
721
+ vi.stubEnv(`${prefix}VERCEL_BRANCH_URL`, "my-site-git-main.vercel.app");
722
+
723
+ init(baseOptions);
724
+
725
+ expect(stringAttr(DEPLOYMENT_ENVIRONMENT_NAME)).toBe("production");
726
+ expect(stringAttr(DEPLOYMENT_NAME)).toBe("production");
727
+ expect(stringAttr(DEPLOYMENT_ID)).toBe("my-site-git-main.vercel.app");
728
+ }
729
+ );
730
+
731
+ it("opts.environment / opts.deploymentName / opts.deploymentId override env-var detection", () => {
732
+ vi.stubEnv("NEXT_PUBLIC_VERCEL_ENV", "from-env");
733
+ vi.stubEnv("NEXT_PUBLIC_VERCEL_TARGET_ENV", "from-env");
734
+ vi.stubEnv("NEXT_PUBLIC_VERCEL_BRANCH_URL", "from-env");
735
+
736
+ init({
737
+ ...baseOptions,
738
+ environment: "manual-environment",
739
+ deploymentName: "manual-deployment-name",
740
+ deploymentId: "manual-deployment-id",
741
+ });
742
+
743
+ expect(stringAttr(DEPLOYMENT_ENVIRONMENT_NAME)).toBe("manual-environment");
744
+ expect(stringAttr(DEPLOYMENT_NAME)).toBe("manual-deployment-name");
745
+ expect(stringAttr(DEPLOYMENT_ID)).toBe("manual-deployment-id");
746
+ });
747
+
748
+ it("emits no environment/deployment attributes when neither env vars nor opts are set", () => {
749
+ init(baseOptions);
750
+
751
+ expect(stringAttr(DEPLOYMENT_ENVIRONMENT_NAME)).toBeUndefined();
752
+ expect(stringAttr(DEPLOYMENT_NAME)).toBeUndefined();
753
+ expect(stringAttr(DEPLOYMENT_ID)).toBeUndefined();
754
+ });
755
+ });
400
756
  });