Skip to content

Commit e1b4bef

Browse files
authored
fix(cli): fix upsert for environments (#2570)
1 parent 10fd98c commit e1b4bef

37 files changed

+885
-870
lines changed

api/tests.yaml

Lines changed: 21 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,9 @@ components:
2020
serviceUnderTest:
2121
$ref: "./triggers.yaml#/components/schemas/Trigger"
2222
specs:
23-
$ref: "#/components/schemas/TestSpecs"
23+
type: array
24+
items:
25+
$ref: "#/components/schemas/TestSpec"
2426
description: specification of assertions that are going to be made
2527
outputs:
2628
description: define test outputs, in a key/value format. The value is processed as an expression
@@ -45,6 +47,8 @@ components:
4547
name:
4648
type: string
4749
selector:
50+
type: string
51+
selectorParsed:
4852
$ref: "#/components/schemas/Selector"
4953
value:
5054
type: string
@@ -76,17 +80,8 @@ components:
7680
specs:
7781
type: array
7882
items:
79-
type: object
80-
properties:
81-
name:
82-
type: string
83-
nullable: true
84-
selector:
85-
$ref: "#/components/schemas/Selector"
86-
assertions:
87-
type: array
88-
items:
89-
type: string
83+
$ref: "#/components/schemas/TestSpec"
84+
9085
example:
9186
specs:
9287
- selector:
@@ -104,6 +99,20 @@ components:
10499
comparator: "="
105100
expected: "200"
106101

102+
TestSpec:
103+
type: object
104+
properties:
105+
name:
106+
type: string
107+
selector:
108+
type: string
109+
selectorParsed:
110+
$ref: "#/components/schemas/Selector"
111+
assertions:
112+
type: array
113+
items:
114+
type: string
115+
107116
TestRun:
108117
type: object
109118
properties:

cli/actions/environments.go

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package actions
22

33
import (
44
"context"
5+
"errors"
56
"fmt"
67
"io/ioutil"
78

@@ -41,7 +42,7 @@ func (action environmentsActions) GetID(file *file.File) (string, error) {
4142
return "", err
4243
}
4344

44-
return *resource.(openapi.EnvironmentResource).Spec.Id, nil
45+
return resource.(openapi.EnvironmentResource).Spec.GetId(), nil
4546
}
4647

4748
func (environment environmentsActions) Apply(ctx context.Context, fileContent file.File) (result *file.File, err error) {
@@ -51,12 +52,21 @@ func (environment environmentsActions) Apply(ctx context.Context, fileContent fi
5152

5253
mapstructure.Decode(fileContent.Definition().Spec, &envResource.Spec)
5354

54-
if envResource.Spec.Id == nil || *envResource.Spec.Id == "" {
55-
result, err := environment.resourceClient.Create(ctx, fileContent)
56-
return result, err
55+
if envResource.Spec.GetId() != "" {
56+
_, err := environment.Get(ctx, envResource.Spec.GetId())
57+
if err != nil {
58+
if !errors.Is(err, utils.ResourceNotFound) {
59+
return nil, err
60+
}
61+
62+
// doesn't exist, so create it
63+
return environment.resourceClient.Create(ctx, fileContent)
64+
}
65+
66+
return environment.resourceClient.Update(ctx, fileContent, envResource.Spec.GetId())
5767
}
5868

59-
result, err = environment.resourceClient.Update(ctx, fileContent, *envResource.Spec.Id)
69+
result, err = environment.resourceClient.Create(ctx, fileContent)
6070
return result, err
6171
}
6272

cli/actions/run_test_action.go

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -72,19 +72,22 @@ func (a runTestAction) Run(ctx context.Context, args RunResourceArgs) error {
7272
envID := args.EnvID
7373

7474
if utils.StringReferencesFile(args.EnvID) {
75+
a.logger.Debug("resolve envID from file reference", zap.String("path", envID))
7576
envResource, err := a.environmentActions.FromFile(ctx, args.EnvID)
7677
if err != nil {
77-
return fmt.Errorf("could not run definition: %w", err)
78+
return fmt.Errorf("could not read environment file: %w", err)
7879
}
7980

8081
_, err = a.environmentActions.ApplyResource(ctx, envResource)
8182
if err != nil {
82-
return fmt.Errorf("could not run definition: %w", err)
83+
return fmt.Errorf("could not apply environmen file: %w", err)
8384
}
8485

85-
envID = *envResource.Spec.Id
86+
envID = envResource.Spec.GetId()
8687
}
8788

89+
a.logger.Debug("resolved env", zap.String("envID", envID))
90+
8891
params := runDefParams{
8992
DefinitionFile: args.DefinitionFile,
9093
EnvID: envID,
@@ -286,14 +289,19 @@ func (a runTestAction) askForMissingVariables(resp *http.Response) (map[string]s
286289
}
287290

288291
func (a runTestAction) getTransaction(ctx context.Context, id string) (openapi.Transaction, error) {
292+
a.client.GetConfig().AddDefaultHeader("X-Tracetest-Augmented", "true")
289293
transaction, _, err := a.client.ResourceApiApi.
290294
GetTransaction(ctx, id).
291295
Execute()
296+
297+
// reset augmented header
298+
delete(a.client.GetConfig().DefaultHeader, "X-Tracetest-Augmented")
299+
292300
if err != nil {
293301
return openapi.Transaction{}, fmt.Errorf("could not execute request: %w", err)
294302
}
295303

296-
return *transaction.Spec, nil
304+
return transaction.GetSpec(), nil
297305
}
298306

299307
func (a runTestAction) getTest(ctx context.Context, id string) (openapi.Test, error) {

cli/formatters/test_run.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ func (f testRun) formatSuccessfulTest(test openapi.Test, run openapi.TestRun) st
111111
buffer.WriteString(message)
112112

113113
for i, specResult := range run.Result.Results {
114-
title := f.getTestSpecTitle(test.Specs.Specs[i].GetName(), specResult)
114+
title := f.getTestSpecTitle(test.Specs[i].GetName(), specResult)
115115
message := f.formatMessage("\t%s %s\n", PASSED_TEST_ICON, title)
116116
message = f.getColoredText(true, message)
117117
buffer.WriteString(message)
@@ -182,7 +182,7 @@ func (f testRun) formatFailedTest(test openapi.Test, run openapi.TestRun) string
182182
}
183183
}
184184

185-
title := f.getTestSpecTitle(test.Specs.Specs[i].GetName(), specResult)
185+
title := f.getTestSpecTitle(test.Specs[i].GetName(), specResult)
186186
icon := f.getStateIcon(allPassed)
187187
message := f.formatMessage("\t%s %s\n", icon, title)
188188
message = f.getColoredText(allPassed, message)

cli/formatters/test_run_test.go

Lines changed: 18 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -68,14 +68,10 @@ func TestSuccessfulTestRunOutputWithResult(t *testing.T) {
6868
Test: openapi.Test{
6969
Id: openapi.PtrString("9876543"),
7070
Name: openapi.PtrString("Testcase 1"),
71-
Specs: &openapi.TestSpecs{
72-
Specs: []openapi.TestSpecsSpecsInner{
73-
{
74-
Selector: &openapi.Selector{
75-
Query: openapi.PtrString(`span[name = "my span"]`),
76-
},
77-
Name: *openapi.NewNullableString(&testSpecName),
78-
},
71+
Specs: []openapi.TestSpec{
72+
{
73+
Selector: openapi.PtrString(`span[name = "my span"]`),
74+
Name: openapi.PtrString(testSpecName),
7975
},
8076
},
8177
},
@@ -127,19 +123,13 @@ func TestFailingTestOutput(t *testing.T) {
127123
Test: openapi.Test{
128124
Id: openapi.PtrString("9876543"),
129125
Name: openapi.PtrString("Testcase 2"),
130-
Specs: &openapi.TestSpecs{
131-
Specs: []openapi.TestSpecsSpecsInner{
132-
{
133-
Selector: &openapi.Selector{
134-
Query: openapi.PtrString(`span[name = "my span"]`),
135-
},
136-
Name: *openapi.NewNullableString(&testSpecName),
137-
},
138-
{
139-
Selector: &openapi.Selector{
140-
Query: openapi.PtrString(`span[name = "my other span"]`),
141-
},
142-
},
126+
Specs: []openapi.TestSpec{
127+
{
128+
Selector: openapi.PtrString(`span[name = "my span"]`),
129+
Name: openapi.PtrString(testSpecName),
130+
},
131+
{
132+
Selector: openapi.PtrString(`span[name = "my other span"]`),
143133
},
144134
},
145135
},
@@ -227,19 +217,13 @@ func TestFailingTestOutputWithPadding(t *testing.T) {
227217
Test: openapi.Test{
228218
Id: openapi.PtrString("9876543"),
229219
Name: openapi.PtrString("Testcase 2"),
230-
Specs: &openapi.TestSpecs{
231-
Specs: []openapi.TestSpecsSpecsInner{
232-
{
233-
Selector: &openapi.Selector{
234-
Query: openapi.PtrString(`span[name = "my span"]`),
235-
},
236-
Name: *openapi.NewNullableString(&testSpecName),
237-
},
238-
{
239-
Selector: &openapi.Selector{
240-
Query: openapi.PtrString(`span[name = "my other span"]`),
241-
},
242-
},
220+
Specs: []openapi.TestSpec{
221+
{
222+
Selector: openapi.PtrString(`span[name = "my span"]`),
223+
Name: openapi.PtrString(testSpecName),
224+
},
225+
{
226+
Selector: openapi.PtrString(`span[name = "my other span"]`),
243227
},
244228
},
245229
},

cli/formatters/transaction.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ func NewTransactionsFormatter() TransactionFormatter {
2222
}
2323

2424
func testSpecUnmarshaller(t *openapi.TestSpecs, b []byte) error {
25-
t.Specs = make([]openapi.TestSpecsSpecsInner, 0)
25+
t.Specs = make([]openapi.TestSpec, 0)
2626
return yaml.Unmarshal(b, &t.Specs)
2727
}
2828

0 commit comments

Comments
 (0)