Skip to content

Commit

Permalink
api_management: splitting the ID parsers
Browse files Browse the repository at this point in the history
  • Loading branch information
tombuildsstuff committed May 25, 2020
1 parent 94cc014 commit 1eca0d9
Show file tree
Hide file tree
Showing 4 changed files with 122 additions and 114 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,37 +6,6 @@ import (
"github.com/terraform-providers/terraform-provider-azurerm/azurerm/helpers/azure"
)

type ApiManagementLoggerId struct {
ResourceGroup string
ServiceName string
Name string
}

func ApiManagementLoggerID(input string) (*ApiManagementLoggerId, error) {
id, err := azure.ParseAzureResourceID(input)
if err != nil {
return nil, fmt.Errorf("parsing Api Management Logger ID %q: %+v", input, err)
}

logger := ApiManagementLoggerId{
ResourceGroup: id.ResourceGroup,
}

if logger.ServiceName, err = id.PopSegment("service"); err != nil {
return nil, err
}

if logger.Name, err = id.PopSegment("loggers"); err != nil {
return nil, err
}

if err := id.ValidateNoEmptySegments(input); err != nil {
return nil, err
}

return &logger, nil
}

type ApiManagementDiagnosticId struct {
ResourceGroup string
ServiceName string
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,89 +2,6 @@ package parse

import "testing"

func TestApiManagementLoggerID(t *testing.T) {
testData := []struct {
Name string
Input string
Expected *ApiManagementLoggerId
}{
{
Name: "Empty",
Input: "",
Expected: nil,
},
{
Name: "No Resource Groups Segment",
Input: "/subscriptions/00000000-0000-0000-0000-000000000000",
Expected: nil,
},
{
Name: "No Resource Groups Value",
Input: "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/",
Expected: nil,
},
{
Name: "Resource Group ID",
Input: "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/foo/",
Expected: nil,
},
{
Name: "Missing Service Name",
Input: "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/resGroup1/providers/Microsoft.ApiManagement/service/",
Expected: nil,
},
{
Name: "Missing Logger",
Input: "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/resGroup1/providers/Microsoft.ApiManagement/service/service1",
Expected: nil,
},
{
Name: "Missing Logger Value",
Input: "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/resGroup1/providers/Microsoft.ApiManagement/service/service1/loggers",
Expected: nil,
},
{
Name: "Logger ID",
Input: "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/resGroup1/providers/Microsoft.ApiManagement/service/service1/loggers/logger1",
Expected: &ApiManagementLoggerId{
Name: "logger1",
ServiceName: "service1",
ResourceGroup: "resGroup1",
},
},
{
Name: "Wrong Casing",
Input: "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/resGroup1/providers/Microsoft.ApiManagement/service/service1/Loggers/logger1",
Expected: nil,
},
}

for _, v := range testData {
t.Logf("[DEBUG] Testing %q", v.Name)

actual, err := ApiManagementLoggerID(v.Input)
if err != nil {
if v.Expected == nil {
continue
}

t.Fatalf("Expected a value but got an error: %s", err)
}

if actual.Name != v.Expected.Name {
t.Fatalf("Expected %q but got %q for Name", v.Expected.Name, actual.Name)
}

if actual.ServiceName != v.Expected.ServiceName {
t.Fatalf("Expected %q but got %q for Service Name", v.Expected.Name, actual.Name)
}

if actual.ResourceGroup != v.Expected.ResourceGroup {
t.Fatalf("Expected %q but got %q for Resource Group", v.Expected.ResourceGroup, actual.ResourceGroup)
}
}
}

func TestApiManagementDiagnosticID(t *testing.T) {
testData := []struct {
Name string
Expand Down
36 changes: 36 additions & 0 deletions azurerm/internal/services/apimanagement/parse/logger_id.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package parse

import (
"github.com/terraform-providers/terraform-provider-azurerm/azurerm/helpers/azure"
)

type ApiManagementLoggerId struct {
ResourceGroup string
ServiceName string
Name string
}

func ApiManagementLoggerID(input string) (*ApiManagementLoggerId, error) {
id, err := azure.ParseAzureResourceID(input)
if err != nil {
return nil, err
}

logger := ApiManagementLoggerId{
ResourceGroup: id.ResourceGroup,
}

if logger.ServiceName, err = id.PopSegment("service"); err != nil {
return nil, err
}

if logger.Name, err = id.PopSegment("loggers"); err != nil {
return nil, err
}

if err := id.ValidateNoEmptySegments(input); err != nil {
return nil, err
}

return &logger, nil
}
86 changes: 86 additions & 0 deletions azurerm/internal/services/apimanagement/parse/logger_id_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
package parse

import "testing"

func TestApiManagementLoggerID(t *testing.T) {
testData := []struct {
Name string
Input string
Expected *ApiManagementLoggerId
}{
{
Name: "Empty",
Input: "",
Expected: nil,
},
{
Name: "No Resource Groups Segment",
Input: "/subscriptions/00000000-0000-0000-0000-000000000000",
Expected: nil,
},
{
Name: "No Resource Groups Value",
Input: "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/",
Expected: nil,
},
{
Name: "Resource Group ID",
Input: "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/foo/",
Expected: nil,
},
{
Name: "Missing Service Name",
Input: "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/resGroup1/providers/Microsoft.ApiManagement/service/",
Expected: nil,
},
{
Name: "Missing Logger",
Input: "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/resGroup1/providers/Microsoft.ApiManagement/service/service1",
Expected: nil,
},
{
Name: "Missing Logger Value",
Input: "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/resGroup1/providers/Microsoft.ApiManagement/service/service1/loggers",
Expected: nil,
},
{
Name: "Logger ID",
Input: "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/resGroup1/providers/Microsoft.ApiManagement/service/service1/loggers/logger1",
Expected: &ApiManagementLoggerId{
Name: "logger1",
ServiceName: "service1",
ResourceGroup: "resGroup1",
},
},
{
Name: "Wrong Casing",
Input: "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/resGroup1/providers/Microsoft.ApiManagement/service/service1/Loggers/logger1",
Expected: nil,
},
}

for _, v := range testData {
t.Logf("[DEBUG] Testing %q", v.Name)

actual, err := ApiManagementLoggerID(v.Input)
if err != nil {
if v.Expected == nil {
continue
}

t.Fatalf("Expected a value but got an error: %s", err)
}

if actual.Name != v.Expected.Name {
t.Fatalf("Expected %q but got %q for Name", v.Expected.Name, actual.Name)
}

if actual.ServiceName != v.Expected.ServiceName {
t.Fatalf("Expected %q but got %q for Service Name", v.Expected.Name, actual.Name)
}

if actual.ResourceGroup != v.Expected.ResourceGroup {
t.Fatalf("Expected %q but got %q for Resource Group", v.Expected.ResourceGroup, actual.ResourceGroup)
}
}
}

0 comments on commit 1eca0d9

Please sign in to comment.