From 1aca2f1f592a4a1f689347ce33b03cf043f79a33 Mon Sep 17 00:00:00 2001 From: Sebastian Poxhofer <secustor@users.noreply.github.com> Date: Sun, 4 Dec 2022 17:41:19 +0100 Subject: [PATCH] test(terraform): further improve testing and simplify test code (#19242) --- .../__snapshots__/extract.spec.ts.snap | 126 ---------------- lib/modules/manager/terraform/extract.spec.ts | 141 ++++++++++++++++-- .../manager/terraform/lockfile/index.spec.ts | 37 ++++- .../manager/terraform/lockfile/util.spec.ts | 62 ++++++++ 4 files changed, 223 insertions(+), 143 deletions(-) delete mode 100644 lib/modules/manager/terraform/__snapshots__/extract.spec.ts.snap diff --git a/lib/modules/manager/terraform/__snapshots__/extract.spec.ts.snap b/lib/modules/manager/terraform/__snapshots__/extract.spec.ts.snap deleted file mode 100644 index cf5bf64e23..0000000000 --- a/lib/modules/manager/terraform/__snapshots__/extract.spec.ts.snap +++ /dev/null @@ -1,126 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`modules/manager/terraform/extract extractPackageFile() extracts modules 1`] = ` -{ - "deps": [ - { - "currentValue": "v1.0.0", - "datasource": "github-tags", - "depName": "github.com/hashicorp/example", - "depType": "module", - "packageName": "hashicorp/example", - }, - { - "currentValue": "next", - "datasource": "github-tags", - "depName": "github.com/hashicorp/example", - "depType": "module", - "packageName": "hashicorp/example", - }, - { - "currentValue": "tfmodule_one-v0.0.9", - "datasource": "github-tags", - "depName": "github.com/githubuser/myrepo", - "depType": "module", - "packageName": "githubuser/myrepo", - }, - { - "currentValue": "v1.0.0", - "datasource": "github-tags", - "depName": "github.com/hashicorp/example.2.3", - "depType": "module", - "packageName": "hashicorp/example.2.3", - }, - { - "currentValue": "v1.0.0", - "datasource": "github-tags", - "depName": "github.com/hashicorp/example.2.3", - "depType": "module", - "packageName": "hashicorp/example.2.3", - }, - { - "currentValue": "0.1.0", - "datasource": "terraform-module", - "depName": "hashicorp/consul/aws", - "depType": "module", - }, - { - "currentValue": "v2.0.0", - "datasource": "github-tags", - "depName": "github.com/hashicorp/example", - "depType": "module", - "packageName": "hashicorp/example", - }, - { - "currentValue": "~> 1.1.0", - "datasource": "terraform-module", - "depName": "app.terraform.io/example-corp/k8s-cluster/azurerm", - "depType": "module", - "registryUrls": [ - "https://app.terraform.io", - ], - }, - { - "currentValue": "~> 1.1", - "datasource": "terraform-module", - "depName": "app.terraform.io/example-corp/k8s-cluster/azurerm", - "depType": "module", - "registryUrls": [ - "https://app.terraform.io", - ], - }, - { - "currentValue": "~~ 1.1", - "datasource": "terraform-module", - "depName": "app.terraform.io/example-corp/k8s-cluster/azurerm", - "depType": "module", - "registryUrls": [ - "https://app.terraform.io", - ], - }, - { - "currentValue": ">= 1.0.0, <= 2.0.0", - "datasource": "terraform-module", - "depName": "hashicorp/consul/aws", - "depType": "module", - }, - { - "currentValue": "v0.1.0", - "datasource": "github-tags", - "depName": "github.com/tieto-cem/terraform-aws-ecs-task-definition", - "depType": "module", - "packageName": "tieto-cem/terraform-aws-ecs-task-definition", - }, - { - "currentValue": "v0.1.0", - "datasource": "github-tags", - "depName": "github.com/tieto-cem/terraform-aws-ecs-task-definition", - "depType": "module", - "packageName": "tieto-cem/terraform-aws-ecs-task-definition", - }, - { - "datasource": "terraform-module", - "depName": "terraform-aws-modules/security-group/aws", - "depType": "module", - }, - { - "currentValue": "<= 2.4.0", - "datasource": "terraform-module", - "depName": "terraform-aws-modules/security-group/aws", - "depType": "module", - }, - { - "currentValue": "1.28.3", - "datasource": "terraform-module", - "depName": "particuleio/addons/kubernetes", - "depType": "module", - }, - { - "skipReason": "local", - }, - { - "skipReason": "no-source", - }, - ], -} -`; diff --git a/lib/modules/manager/terraform/extract.spec.ts b/lib/modules/manager/terraform/extract.spec.ts index b7d5c78d03..db4463d4d5 100644 --- a/lib/modules/manager/terraform/extract.spec.ts +++ b/lib/modules/manager/terraform/extract.spec.ts @@ -43,14 +43,134 @@ describe('modules/manager/terraform/extract', () => { const res = await extractPackageFile(modules, 'modules.tf', {}); expect(res?.deps).toHaveLength(18); expect(res?.deps.filter((dep) => dep.skipReason)).toHaveLength(2); - expect(res).toMatchSnapshot(); + expect(res?.deps).toIncludeAllPartialMembers([ + { + packageName: 'hashicorp/example', + depType: 'module', + depName: 'github.com/hashicorp/example', + currentValue: 'next', + datasource: 'github-tags', + }, + { + packageName: 'hashicorp/example', + depType: 'module', + depName: 'github.com/hashicorp/example', + currentValue: 'v1.0.0', + datasource: 'github-tags', + }, + { + packageName: 'hashicorp/example', + depType: 'module', + depName: 'github.com/hashicorp/example', + currentValue: 'next', + datasource: 'github-tags', + }, + { + packageName: 'githubuser/myrepo', + depType: 'module', + depName: 'github.com/githubuser/myrepo', + currentValue: 'tfmodule_one-v0.0.9', + datasource: 'github-tags', + }, + { + packageName: 'hashicorp/example.2.3', + depType: 'module', + depName: 'github.com/hashicorp/example.2.3', + currentValue: 'v1.0.0', + datasource: 'github-tags', + }, + { + packageName: 'hashicorp/example.2.3', + depType: 'module', + depName: 'github.com/hashicorp/example.2.3', + currentValue: 'v1.0.0', + datasource: 'github-tags', + }, + { + currentValue: '0.1.0', + depType: 'module', + depName: 'hashicorp/consul/aws', + datasource: 'terraform-module', + }, + { + packageName: 'hashicorp/example', + depType: 'module', + depName: 'github.com/hashicorp/example', + currentValue: 'v2.0.0', + datasource: 'github-tags', + }, + { + currentValue: '~> 1.1.0', + registryUrls: ['https://app.terraform.io'], + depType: 'module', + depName: 'app.terraform.io/example-corp/k8s-cluster/azurerm', + datasource: 'terraform-module', + }, + { + currentValue: '~> 1.1', + registryUrls: ['https://app.terraform.io'], + depType: 'module', + depName: 'app.terraform.io/example-corp/k8s-cluster/azurerm', + datasource: 'terraform-module', + }, + { + currentValue: '~~ 1.1', + registryUrls: ['https://app.terraform.io'], + depType: 'module', + depName: 'app.terraform.io/example-corp/k8s-cluster/azurerm', + datasource: 'terraform-module', + }, + { + currentValue: '>= 1.0.0, <= 2.0.0', + depType: 'module', + depName: 'hashicorp/consul/aws', + datasource: 'terraform-module', + }, + { + packageName: 'tieto-cem/terraform-aws-ecs-task-definition', + depType: 'module', + depName: 'github.com/tieto-cem/terraform-aws-ecs-task-definition', + currentValue: 'v0.1.0', + datasource: 'github-tags', + }, + { + packageName: 'tieto-cem/terraform-aws-ecs-task-definition', + depType: 'module', + depName: 'github.com/tieto-cem/terraform-aws-ecs-task-definition', + currentValue: 'v0.1.0', + datasource: 'github-tags', + }, + { + depType: 'module', + depName: 'terraform-aws-modules/security-group/aws', + datasource: 'terraform-module', + }, + { + currentValue: '<= 2.4.0', + depType: 'module', + depName: 'terraform-aws-modules/security-group/aws', + datasource: 'terraform-module', + }, + { + currentValue: '1.28.3', + depType: 'module', + depName: 'particuleio/addons/kubernetes', + datasource: 'terraform-module', + }, + { + skipReason: 'local', + }, + { + skipReason: 'no-source', + }, + ]); }); it('extracts bitbucket modules', async () => { const res = await extractPackageFile(bitbucketModules, 'modules.tf', {}); expect(res?.deps).toHaveLength(11); expect(res?.deps.filter((dep) => dep.skipReason)).toHaveLength(0); - expect(res?.deps.sort()).toMatchObject([ + expect(res?.deps).toIncludeAllPartialMembers([ { currentValue: 'v1.0.0', datasource: 'git-tags', @@ -137,7 +257,8 @@ describe('modules/manager/terraform/extract', () => { 'modules.tf', {} ); - expect(res?.deps.sort()).toMatchObject([ + expect(res?.deps).toHaveLength(3); + expect(res?.deps).toIncludeAllPartialMembers([ { currentValue: 'v1.0.0', datasource: 'git-tags', @@ -166,7 +287,7 @@ describe('modules/manager/terraform/extract', () => { const res = await extractPackageFile(providers, 'providers.tf', {}); expect(res?.deps).toHaveLength(15); expect(res?.deps.filter((dep) => dep.skipReason)).toHaveLength(2); - expect(res?.deps.sort()).toMatchObject([ + expect(res?.deps).toIncludeAllPartialMembers([ { currentValue: '1.36.1', datasource: 'terraform-provider', @@ -282,7 +403,7 @@ describe('modules/manager/terraform/extract', () => { const res = await extractPackageFile(docker, 'docker.tf', {}); expect(res?.deps).toHaveLength(8); expect(res?.deps.filter((dep) => dep.skipReason)).toHaveLength(5); - expect(res?.deps.sort()).toMatchObject([ + expect(res?.deps).toIncludeAllPartialMembers([ { autoReplaceStringTemplate: '{{depName}}{{#if newValue}}:{{newValue}}{{/if}}{{#if newDigest}}@{{newDigest}}{{/if}}', @@ -338,7 +459,7 @@ describe('modules/manager/terraform/extract', () => { const res = await extractPackageFile(kubernetes, 'kubernetes.tf', {}); expect(res?.deps).toHaveLength(18); expect(res?.deps.filter((dep) => dep.skipReason)).toHaveLength(1); - expect(res?.deps.sort()).toMatchObject([ + expect(res?.deps).toIncludeAllPartialMembers([ { depName: 'gcr.io/kaniko-project/executor', currentValue: 'v1.7.0', @@ -445,7 +566,7 @@ describe('modules/manager/terraform/extract', () => { const res = await extractPackageFile(helm, 'helm.tf', {}); expect(res?.deps).toHaveLength(6); expect(res?.deps.filter((dep) => dep.skipReason)).toHaveLength(2); - expect(res?.deps.sort()).toMatchObject([ + expect(res?.deps).toIncludeAllPartialMembers([ { currentValue: '1.0.1', datasource: 'helm', @@ -502,7 +623,7 @@ describe('modules/manager/terraform/extract', () => { ); expect(res?.deps).toHaveLength(3); expect(res?.deps.filter((dep) => dep.skipReason)).toHaveLength(0); - expect(res?.deps.sort()).toMatchObject([ + expect(res?.deps).toIncludeAllPartialMembers([ { currentValue: '~> 3.0', datasource: 'terraform-provider', @@ -538,7 +659,7 @@ describe('modules/manager/terraform/extract', () => { ); expect(res?.deps).toHaveLength(1); expect(res?.deps.filter((dep) => dep.skipReason)).toHaveLength(0); - expect(res?.deps.sort()).toMatchObject([ + expect(res?.deps).toIncludeAllPartialMembers([ { currentValue: '1.0.0', datasource: 'github-releases', @@ -557,7 +678,7 @@ describe('modules/manager/terraform/extract', () => { ); expect(res?.deps).toHaveLength(3); expect(res?.deps.filter((dep) => dep.skipReason)).toHaveLength(1); - expect(res?.deps.sort()).toMatchObject([ + expect(res?.deps).toIncludeAllPartialMembers([ { currentValue: '1.1.6', datasource: 'github-releases', diff --git a/lib/modules/manager/terraform/lockfile/index.spec.ts b/lib/modules/manager/terraform/lockfile/index.spec.ts index 7b709d51d5..5294f00725 100644 --- a/lib/modules/manager/terraform/lockfile/index.spec.ts +++ b/lib/modules/manager/terraform/lockfile/index.spec.ts @@ -90,7 +90,10 @@ describe('modules/manager/terraform/lockfile/index', () => { expect(result).not.toBeNull(); expect(result).toBeArrayOfSize(1); expect(result?.[0].file).not.toBeNull(); - expect(result?.[0].file).toMatchSnapshot(); + expect(result?.[0].file).toMatchSnapshot({ + type: 'addition', + path: '.terraform.lock.hcl', + }); expect(mockHash.mock.calls).toBeArrayOfSize(1); expect(mockHash.mock.calls).toMatchSnapshot(); @@ -122,7 +125,10 @@ describe('modules/manager/terraform/lockfile/index', () => { expect(result).not.toBeNull(); expect(result).toBeArrayOfSize(1); expect(result?.[0].file).not.toBeNull(); - expect(result?.[0].file).toMatchSnapshot(); + expect(result?.[0].file).toMatchSnapshot({ + type: 'addition', + path: '.terraform.lock.hcl', + }); expect(mockHash.mock.calls).toBeArrayOfSize(1); expect(mockHash.mock.calls).toMatchSnapshot(); @@ -173,7 +179,10 @@ describe('modules/manager/terraform/lockfile/index', () => { expect(result).not.toBeNull(); expect(result).toBeArrayOfSize(1); expect(result?.[0].file).not.toBeNull(); - expect(result?.[0].file).toMatchSnapshot(); + expect(result?.[0].file).toMatchSnapshot({ + type: 'addition', + path: '.terraform.lock.hcl', + }); expect(mockHash.mock.calls).toBeArrayOfSize(1); expect(mockHash.mock.calls).toMatchSnapshot(); @@ -205,7 +214,10 @@ describe('modules/manager/terraform/lockfile/index', () => { expect(result).not.toBeNull(); expect(result).toBeArrayOfSize(1); expect(result?.[0].file).not.toBeNull(); - expect(result?.[0].file).toMatchSnapshot(); + expect(result?.[0].file).toMatchSnapshot({ + type: 'addition', + path: '.terraform.lock.hcl', + }); expect(mockHash.mock.calls).toBeArrayOfSize(1); expect(mockHash.mock.calls).toMatchSnapshot(); @@ -237,7 +249,10 @@ describe('modules/manager/terraform/lockfile/index', () => { expect(result).not.toBeNull(); expect(result).toBeArrayOfSize(1); expect(result?.[0].file).not.toBeNull(); - expect(result?.[0].file).toMatchSnapshot(); + expect(result?.[0].file).toMatchSnapshot({ + type: 'addition', + path: 'test/.terraform.lock.hcl', + }); expect(mockHash.mock.calls).toBeArrayOfSize(1); expect(mockHash.mock.calls).toMatchSnapshot(); @@ -290,7 +305,10 @@ describe('modules/manager/terraform/lockfile/index', () => { expect(result).not.toBeNull(); expect(result).toBeArrayOfSize(1); expect(result?.[0].file).not.toBeNull(); - expect(result?.[0].file).toMatchSnapshot(); + expect(result?.[0].file).toMatchSnapshot({ + type: 'addition', + path: 'test/.terraform.lock.hcl', + }); expect(mockHash.mock.calls).toBeArrayOfSize(4); expect(mockHash.mock.calls).toMatchSnapshot(); @@ -436,7 +454,12 @@ describe('modules/manager/terraform/lockfile/index', () => { expect(result).toBeArrayOfSize(1); result?.forEach((value) => expect(value.file).not.toBeNull()); - result?.forEach((value) => expect(value.file).toMatchSnapshot()); + result?.forEach((value) => + expect(value.file).toMatchSnapshot({ + type: 'addition', + path: 'subfolder/.terraform.lock.hcl', + }) + ); expect(mockHash.mock.calls).toBeArrayOfSize(2); expect(mockHash.mock.calls).toMatchSnapshot(); diff --git a/lib/modules/manager/terraform/lockfile/util.spec.ts b/lib/modules/manager/terraform/lockfile/util.spec.ts index 91a124b5dc..8e20c95700 100644 --- a/lib/modules/manager/terraform/lockfile/util.spec.ts +++ b/lib/modules/manager/terraform/lockfile/util.spec.ts @@ -11,6 +11,68 @@ describe('modules/manager/terraform/lockfile/util', () => { it('extracts', () => { const res = extractLocks(Fixtures.get('validLockfile.hcl')); expect(res).toHaveLength(3); + expect(res).toIncludeAllPartialMembers([ + { + packageName: 'hashicorp/aws', + registryUrl: 'https://registry.terraform.io', + version: '3.0.0', + constraints: '3.0.0', + hashes: [ + 'h1:ULKfwySvQ4pDhy027ryRhLxDhg640wsojYc+7NHMFBU=', + 'zh:25294510ae9c250502f2e37ac32b01017439735f098f82a1728772427626a2fd', + 'zh:3b723e7772d47bd8cc11bea6e5d3e0b5e1df8398c0e7aaf510e3a8a54e0f1874', + 'zh:4b7b73b86f4a0705d5d2a7f1d3ad3279706bdb3957a48f4a389c36918fba838e', + 'zh:9e26cdc3be97e3001c253c0ca28c5c8ff2d5476373ca1beb849f3f3957ce7f1a', + 'zh:9e73cf1304bf57968d3048d70c0b766d41497430a2a9a7a718a196f3a385106a', + 'zh:a30b5b66facfbb2b02814e4cd33ca9899f9ade5bbf478f78c41d2fe789f0582a', + 'zh:b06fb5da094db41cb5e430c95c988b73f32695e9f90f25499e926842dbd21b21', + 'zh:c5a4ff607e9e9edee3fcd6d6666241fb532adf88ea1fe24f2aa1eb36845b3ca3', + 'zh:df568a69087831c1780fac4395630a2cfb3cdf67b7dffbfe16bd78c64770bb75', + 'zh:fce1b69dd673aace19508640b0b9b7eb1ef7e746d76cb846b49e7d52e0f5fb7e', + ], + }, + { + packageName: 'hashicorp/azurerm', + registryUrl: 'https://registry.terraform.io', + version: '2.50.0', + constraints: '~> 2.50', + hashes: [ + 'h1:Vr6WUm88s9hXGkyVjHtHsP2Jmc2ypQXn6ww7dXtvk1M=', + 'zh:0c0688d5a743248f8646d39eb3645a4ac19fd7523ba1b47072fa3fb03b92b1b0', + 'zh:2beb3a55ee970f87a9292ae96d57134be8a03d0566117e7be0fe0d9c1267e4ea', + 'zh:38091b463fbafe5756420ce34c87845c2a391fec0cded27bdcbbca28febad382', + 'zh:4ba455da3b37ba8f8b03ff2781121d9c54d0bd8afd76dfe67593011c475dd73f', + 'zh:5d32b9ed871b3c3b774dc69f1fe14cdf7c1fd63d12bb5f21aad4bfbf75e5ee3d', + 'zh:6c80cf90a3fc1e17d9caf67cc558c2ff91f8b25e29fdf00942f67711895be5c0', + 'zh:c0a53e3165407999d10de7aaa983485d42797433c60b5775791ae299121279ed', + 'zh:dab51d6d76041505aeebf20111febe8616ec465ca31dfb7901f5f5c23a5af095', + 'zh:e1ad6399f6a6d799002206ee4cb7b794dbb2533b8c3c14502a4419955ec96bff', + 'zh:e98f1d178d1e111b3f3449e27d305ce263071226fad3d86272e1bd161c26fd43', + 'zh:eb76ec000c9c49a0bf730370c8880f671597bc01f7b7401ab301df7124c049ec', + ], + }, + { + packageName: 'hashicorp/random', + registryUrl: 'https://registry.terraform.io', + version: '2.2.1', + constraints: '~> 2.2', + hashes: [ + 'h1:Zg1Bpi6vr7b0H6no8kVDfEucn5pvNALivdrVKVHarGs=', + 'zh:072ce92b0138ee65df2e4e2e6e5f6632fa12a7e6453b91399bad89291855d426', + 'zh:5731987fe61051515f449033e456ee55207caf17ef41096eb82247810585f53b', + 'zh:6f18b10175708bb5839e1f2082dcc02651b876786cd54ec415a091f3821807c3', + 'zh:7fa7737661380d18cba3cdc71c4ec6f2fd281b9d61112f6b48d06ca8bbf97771', + 'zh:8466cb8fbb4de887b23039082a6e3dc85aeabce86dd808e2a7a65e4e1c51dbae', + 'zh:888c63417701c13bbe785ab11dc690d4803e6a2156318cf188970b7b6400b99e', + 'zh:a231df55d36fbad1a6705f5d3be4f7459a73ec76117d13f22aa83c10fc610278', + 'zh:b62d9a4cd64a2d229070260f4abfef476ebbd7c5511b43e9cdccf23ce938f630', + 'zh:b6bd1a325f909bb93f7c9bef00eb306bef1e406cbdf557901d755a3e7a4a5448', + 'zh:b9f59afc23cc5567075f76313214baa1e5ce909325229e23c9a4666f7b26e7f7', + 'zh:d040220c09b8d9d6bd937572bd5b14bc069af2b883185a873460530d8a1de6e6', + 'zh:f254c1f943eb016ae07ebe91b23f813dc79f2064616c65f98c8f64ce23be90c4', + ], + }, + ]); expect(res).toMatchSnapshot(); }); }); -- GitLab