Skip to content

Commit

Permalink
add file updater test cases showing the v prefix being dropped
Browse files Browse the repository at this point in the history
  • Loading branch information
declan-fitzpatrick committed Sep 3, 2021
1 parent 99a4d42 commit b8ee465
Show file tree
Hide file tree
Showing 8 changed files with 333 additions and 0 deletions.
232 changes: 232 additions & 0 deletions terraform/spec/dependabot/terraform/file_updater_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,52 @@ module "s3-webapp" {
end
end

context "with a private module with v prefix" do
let(:project_name) { "private_module_with_v_prefix" }

let(:dependencies) do
[
Dependabot::Dependency.new(
name: "example-org-5d3190/s3-webapp/aws",
version: "2.0.0",
previous_version: "v1.0.0",
requirements: [{
requirement: "2.0.0",
groups: [],
file: "main.tf",
source: {
type: "registry",
registry_hostname: "app.terraform.io",
module_identifier: "example-org-5d3190/s3-webapp/aws"
}
}],
previous_requirements: [{
requirement: "v1.0.0",
groups: [],
file: "main.tf",
source: {
type: "registry",
registry_hostname: "app.terraform.io",
module_identifier: "example-org-5d3190/s3-webapp/aws"
}
}],
package_manager: "terraform"
)
]
end

it "updates the private module version and drops the v prefix" do
updated_file = subject.find { |file| file.name == "main.tf" }

expect(updated_file.content).to include(<<~HCL)
module "s3-webapp" {
source = "app.terraform.io/example-org-5d3190/s3-webapp/aws"
version = "2.0.0"
}
HCL
end
end

context "with a private provider" do
let(:project_name) { "private_provider" }

Expand Down Expand Up @@ -346,6 +392,52 @@ module "consul" {
end
end

context "with a legacy registry dependency with v prefix" do
let(:project_name) { "registry_with_v_prefix" }
let(:dependencies) do
[
Dependabot::Dependency.new(
name: "hashicorp/consul/aws",
version: "0.3.1",
previous_version: "v0.1.0",
requirements: [{
requirement: "0.3.1",
groups: [],
file: "main.tf",
source: {
type: "registry",
registry_hostname: "registry.terraform.io",
module_identifier: "hashicorp/consul/aws"
}
}],
previous_requirements: [{
requirement: "v0.1.0",
groups: [],
file: "main.tf",
source: {
type: "registry",
registry_hostname: "registry.terraform.io",
module_identifier: "hashicorp/consul/aws"
}
}],
package_manager: "terraform"
)
]
end

it "updates the requirement and drops the v prefix" do
updated_file = subject.find { |file| file.name == "main.tf" }

expect(updated_file.content).to include(
<<~DEP
module "consul" {
source = "hashicorp/consul/aws"
version = "0.3.1"
DEP
)
end
end

context "with an hcl2-based registry dependency" do
let(:project_name) { "registry_012" }
let(:dependencies) do
Expand Down Expand Up @@ -393,6 +485,52 @@ module "consul" {
end
end

context "with an hcl2-based registry dependency with a v prefix" do
let(:project_name) { "registry_012_with_v_prefix" }
let(:dependencies) do
[
Dependabot::Dependency.new(
name: "hashicorp/consul/aws",
version: "0.3.1",
previous_version: "v0.1.0",
requirements: [{
requirement: "0.3.1",
groups: [],
file: "main.tf",
source: {
type: "registry",
registry_hostname: "registry.terraform.io",
module_identifier: "hashicorp/consul/aws"
}
}],
previous_requirements: [{
requirement: "v0.1.0",
groups: [],
file: "main.tf",
source: {
type: "registry",
registry_hostname: "registry.terraform.io",
module_identifier: "hashicorp/consul/aws"
}
}],
package_manager: "terraform"
)
]
end

it "updates the requirement and drops the v prefix" do
updated_file = subject.find { |file| file.name == "main.tf" }

expect(updated_file.content).to include(
<<~DEP
module "consul" {
source = "hashicorp/consul/aws"
version = "0.3.1"
DEP
)
end
end

context "with an hcl-based terragrunt file" do
let(:project_name) { "terragrunt_hcl" }

Expand Down Expand Up @@ -872,6 +1010,53 @@ module "github_terraform" {
end
end

describe "for a nested module with a v prefix" do
let(:project_name) { "nested_modules_with_v_prefix" }
let(:dependencies) do
[
Dependabot::Dependency.new(
name: "terraform-aws-modules/iam/aws",
version: "4.1.0",
previous_version: "v4.0.0",
requirements: [{
requirement: "4.1.0",
groups: [],
file: "main.tf",
source: {
type: "registry",
registry_hostname: "registry.terraform.io",
module_identifier: "iam/aws"
}
}],
previous_requirements: [{
requirement: "v4.0.0",
groups: [],
file: "main.tf",
source: {
type: "registry",
registry_hostname: "registry.terraform.io",
module_identifier: "iam/aws"
}
}],
package_manager: "terraform"
)
]
end

it "updates the requirement and drops the v prefix" do
updated_file = subject.find { |file| file.name == "main.tf" }

expect(updated_file.content).to include(
<<~DEP
module "github_terraform" {
source = "terraform-aws-modules/iam/aws//modules/iam-assumable-role"
version = "4.1.0"
}
DEP
)
end
end

describe "with a lockfile and modules that need to be installed" do
let(:project_name) { "lockfile_with_modules" }
let(:dependencies) do
Expand Down Expand Up @@ -965,6 +1150,53 @@ module "caf" {
end
end

describe "when updating a module with a v prefix in a project with a provider lockfile" do
let(:project_name) { "lockfile_with_modules_with_v_prefix" }
let(:dependencies) do
[
Dependabot::Dependency.new(
name: "aztfmod/caf/azurerm",
version: "5.3.10",
previous_version: "v5.1.0",
requirements: [{
requirement: "5.3.10",
groups: [],
file: "caf_module.tf",
source: {
type: "registry",
registry_hostname: "registry.terraform.io",
module_identifier: "aztfmod/caf/azurerm"
}
}],
previous_requirements: [{
requirement: "v5.1.0",
groups: [],
file: "caf_module.tf",
source: {
type: "registry",
registry_hostname: "registry.terraform.io",
module_identifier: "aztfmod/caf/azurerm"
}
}],
package_manager: "terraform"
)
]
end

it "updates the module version and drops the v prefix" do
module_file = subject.find { |file| file.name == "caf_module.tf" }

expect(module_file.content).to include(
<<~DEP
module "caf" {
source = "aztfmod/caf/azurerm"
version = "5.3.10"
}
DEP
)
end
end

describe "when updating a provider with local path modules" do
let(:project_name) { "provider_with_local_path_modules" }
let(:dependencies) do
Expand Down

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
module "caf" {
source = "aztfmod/caf/azurerm"
version = "v5.1.0"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
terraform {
required_providers {
github = {
source = "integrations/github"
version = "~> 4.4, <= 4.12.0"
}
}
required_version = ">= v0.14"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
module "github_terraform" {
source = "terraform-aws-modules/iam/aws//modules/iam-assumable-role"
version = "v4.0.0"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
module "s3-webapp" {
source = "app.terraform.io/example-org-5d3190/s3-webapp/aws"
version = "v1.0.0"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
module "consul" {
source = "hashicorp/consul/aws"
version = "v0.1.0"
}

module "vpc" {
source = "app.terraform.io/example_corp/vpc/aws"
version = "v0.9.3"
}

module "rds" {
source = "terraform-aws-modules/rds/aws"
version = "~> v1.0.0"
}

module "members-github" {
source = "devops-workflow/members/github"
}

module "merged" {
source = "mongodb/ecs-task-definition/aws//modules/merge"

container_definitions = [
var.web_container_definition,
module.xray.container_definitions,
module.reverse_proxy.container_definitions,
module.datadog.container_definitions,
]
}
29 changes: 29 additions & 0 deletions terraform/spec/fixtures/projects/registry_with_v_prefix/main.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
module "consul" {
source = "hashicorp/consul/aws"
version = "v0.1.0"
}

module "vpc" {
source = "app.terraform.io/example_corp/vpc/aws"
version = "v0.9.3"
}

module "rds" {
source = "terraform-aws-modules/rds/aws"
version = "~> v1.0.0"
}

module "members-github" {
source = "devops-workflow/members/github"
}

module "merged" {
source = "mongodb/ecs-task-definition/aws//modules/merge"

container_definitions = [
"${var.web_container_definition}",
"${module.xray.container_definitions}",
"${module.reverse_proxy.container_definitions}",
"${module.datadog.container_definitions}",
]
}

0 comments on commit b8ee465

Please sign in to comment.