Skip to content

Commit 8c5dd2b

Browse files
bchotedchamb
andauthored
Fix incorrect value for azuredevops.Time when using in query parameter (#81)
* Add `AsQueryParameter` to `azuredevops.Time` * replace `azuredevops.Time.String` usages to `azuredevops.Time.AsQueryParameter` Co-authored-by: Ted Chambers <[email protected]>
1 parent f739e55 commit 8c5dd2b

File tree

7 files changed

+41
-21
lines changed

7 files changed

+41
-21
lines changed

azuredevops/audit/client.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -49,10 +49,10 @@ func (client *ClientImpl) DownloadLog(ctx context.Context, args DownloadLogArgs)
4949
}
5050
queryParams.Add("format", *args.Format)
5151
if args.StartTime != nil {
52-
queryParams.Add("startTime", (*args.StartTime).String())
52+
queryParams.Add("startTime", (*args.StartTime).AsQueryParameter())
5353
}
5454
if args.EndTime != nil {
55-
queryParams.Add("endTime", (*args.EndTime).String())
55+
queryParams.Add("endTime", (*args.EndTime).AsQueryParameter())
5656
}
5757
locationId, _ := uuid.Parse("b7b98a76-04e8-4f4d-ac72-9d46492caaac")
5858
resp, err := client.Client.Send(ctx, http.MethodGet, locationId, "5.1-preview.1", nil, queryParams, nil, "", "application/octet-stream", nil)
@@ -77,10 +77,10 @@ type DownloadLogArgs struct {
7777
func (client *ClientImpl) QueryLog(ctx context.Context, args QueryLogArgs) (*AuditLogQueryResult, error) {
7878
queryParams := url.Values{}
7979
if args.StartTime != nil {
80-
queryParams.Add("startTime", (*args.StartTime).String())
80+
queryParams.Add("startTime", (*args.StartTime).AsQueryParameter())
8181
}
8282
if args.EndTime != nil {
83-
queryParams.Add("endTime", (*args.EndTime).String())
83+
queryParams.Add("endTime", (*args.EndTime).AsQueryParameter())
8484
}
8585
if args.BatchSize != nil {
8686
queryParams.Add("batchSize", strconv.Itoa(*args.BatchSize))

azuredevops/build/client.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1524,10 +1524,10 @@ func (client *ClientImpl) GetBuilds(ctx context.Context, args GetBuildsArgs) (*G
15241524
queryParams.Add("buildNumber", *args.BuildNumber)
15251525
}
15261526
if args.MinTime != nil {
1527-
queryParams.Add("minTime", (*args.MinTime).String())
1527+
queryParams.Add("minTime", (*args.MinTime).AsQueryParameter())
15281528
}
15291529
if args.MaxTime != nil {
1530-
queryParams.Add("maxTime", (*args.MaxTime).String())
1530+
queryParams.Add("maxTime", (*args.MaxTime).AsQueryParameter())
15311531
}
15321532
if args.RequestedFor != nil {
15331533
queryParams.Add("requestedFor", *args.RequestedFor)
@@ -1889,7 +1889,7 @@ func (client *ClientImpl) GetDefinition(ctx context.Context, args GetDefinitionA
18891889
queryParams.Add("revision", strconv.Itoa(*args.Revision))
18901890
}
18911891
if args.MinMetricsTime != nil {
1892-
queryParams.Add("minMetricsTime", (*args.MinMetricsTime).String())
1892+
queryParams.Add("minMetricsTime", (*args.MinMetricsTime).AsQueryParameter())
18931893
}
18941894
if args.PropertyFilters != nil {
18951895
listAsString := strings.Join((*args.PropertyFilters)[:], ",")
@@ -1939,7 +1939,7 @@ func (client *ClientImpl) GetDefinitionMetrics(ctx context.Context, args GetDefi
19391939

19401940
queryParams := url.Values{}
19411941
if args.MinMetricsTime != nil {
1942-
queryParams.Add("minMetricsTime", (*args.MinMetricsTime).String())
1942+
queryParams.Add("minMetricsTime", (*args.MinMetricsTime).AsQueryParameter())
19431943
}
19441944
locationId, _ := uuid.Parse("d973b939-0ce0-4fec-91d8-da3940fa1827")
19451945
resp, err := client.Client.Send(ctx, http.MethodGet, locationId, "5.1-preview.1", routeValues, queryParams, nil, "", "application/json", nil)
@@ -2090,7 +2090,7 @@ func (client *ClientImpl) GetDefinitions(ctx context.Context, args GetDefinition
20902090
queryParams.Add("continuationToken", *args.ContinuationToken)
20912091
}
20922092
if args.MinMetricsTime != nil {
2093-
queryParams.Add("minMetricsTime", (*args.MinMetricsTime).String())
2093+
queryParams.Add("minMetricsTime", (*args.MinMetricsTime).AsQueryParameter())
20942094
}
20952095
if args.DefinitionIds != nil {
20962096
var stringList []string
@@ -2454,7 +2454,7 @@ func (client *ClientImpl) GetProjectMetrics(ctx context.Context, args GetProject
24542454

24552455
queryParams := url.Values{}
24562456
if args.MinMetricsTime != nil {
2457-
queryParams.Add("minMetricsTime", (*args.MinMetricsTime).String())
2457+
queryParams.Add("minMetricsTime", (*args.MinMetricsTime).AsQueryParameter())
24582458
}
24592459
locationId, _ := uuid.Parse("7433fae7-a6bc-41dc-a6e2-eef9005ce41a")
24602460
resp, err := client.Client.Send(ctx, http.MethodGet, locationId, "5.1-preview.1", routeValues, queryParams, nil, "", "application/json", nil)

azuredevops/models.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,11 @@ func (t *Time) MarshalJSON() ([]byte, error) {
9595
return json.Marshal(t.Time)
9696
}
9797

98+
// AsQueryParameter formats time value for query parameter usage.
99+
func (t Time) AsQueryParameter() string {
100+
return t.Time.Format(time.RFC3339)
101+
}
102+
98103
func (t Time) String() string {
99104
return t.Time.String()
100105
}

azuredevops/models_test.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,21 @@ func TestModels_Marshal_Unmarshal_Time(t *testing.T) {
6464
}
6565
}
6666

67+
func TestModels_Time_AsQueryParameter(t *testing.T) {
68+
tt := &Time{
69+
// NOTE: set nsec to 0 to avoid precision loss
70+
Time: time.Date(2006, 1, 2, 3, 4, 5, 0, time.UTC),
71+
}
72+
queryParameterValue := tt.AsQueryParameter()
73+
parsedTime, err := time.Parse(time.RFC3339, queryParameterValue)
74+
if err != nil {
75+
t.Errorf("invalid query parameter %s value for time: %s", tt.Time, queryParameterValue)
76+
}
77+
if !tt.Time.Equal(parsedTime) {
78+
t.Errorf("should convert back to original value: %s %s", tt.Time, parsedTime)
79+
}
80+
}
81+
6782
type TestModel struct {
6883
Id *uuid.UUID `json:"id,omitempty"`
6984
Time1 *Time `json:"time1,omitempty"`

azuredevops/notification/client.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -289,10 +289,10 @@ func (client *ClientImpl) ListLogs(ctx context.Context, args ListLogsArgs) (*[]I
289289

290290
queryParams := url.Values{}
291291
if args.StartTime != nil {
292-
queryParams.Add("startTime", (*args.StartTime).String())
292+
queryParams.Add("startTime", (*args.StartTime).AsQueryParameter())
293293
}
294294
if args.EndTime != nil {
295-
queryParams.Add("endTime", (*args.EndTime).String())
295+
queryParams.Add("endTime", (*args.EndTime).AsQueryParameter())
296296
}
297297
locationId, _ := uuid.Parse("991842f3-eb16-4aea-ac81-81353ef2b75c")
298298
resp, err := client.Client.Send(ctx, http.MethodGet, locationId, "5.1", routeValues, queryParams, nil, "", "application/json", nil)

azuredevops/release/client.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -402,10 +402,10 @@ func (client *ClientImpl) GetDeployments(ctx context.Context, args GetDeployment
402402
queryParams.Add("createdBy", *args.CreatedBy)
403403
}
404404
if args.MinModifiedTime != nil {
405-
queryParams.Add("minModifiedTime", (*args.MinModifiedTime).String())
405+
queryParams.Add("minModifiedTime", (*args.MinModifiedTime).AsQueryParameter())
406406
}
407407
if args.MaxModifiedTime != nil {
408-
queryParams.Add("maxModifiedTime", (*args.MaxModifiedTime).String())
408+
queryParams.Add("maxModifiedTime", (*args.MaxModifiedTime).AsQueryParameter())
409409
}
410410
if args.DeploymentStatus != nil {
411411
queryParams.Add("deploymentStatus", string(*args.DeploymentStatus))
@@ -429,10 +429,10 @@ func (client *ClientImpl) GetDeployments(ctx context.Context, args GetDeployment
429429
queryParams.Add("createdFor", *args.CreatedFor)
430430
}
431431
if args.MinStartedTime != nil {
432-
queryParams.Add("minStartedTime", (*args.MinStartedTime).String())
432+
queryParams.Add("minStartedTime", (*args.MinStartedTime).AsQueryParameter())
433433
}
434434
if args.MaxStartedTime != nil {
435-
queryParams.Add("maxStartedTime", (*args.MaxStartedTime).String())
435+
queryParams.Add("maxStartedTime", (*args.MaxStartedTime).AsQueryParameter())
436436
}
437437
if args.SourceBranch != nil {
438438
queryParams.Add("sourceBranch", *args.SourceBranch)
@@ -954,10 +954,10 @@ func (client *ClientImpl) GetReleases(ctx context.Context, args GetReleasesArgs)
954954
queryParams.Add("environmentStatusFilter", strconv.Itoa(*args.EnvironmentStatusFilter))
955955
}
956956
if args.MinCreatedTime != nil {
957-
queryParams.Add("minCreatedTime", (*args.MinCreatedTime).String())
957+
queryParams.Add("minCreatedTime", (*args.MinCreatedTime).AsQueryParameter())
958958
}
959959
if args.MaxCreatedTime != nil {
960-
queryParams.Add("maxCreatedTime", (*args.MaxCreatedTime).String())
960+
queryParams.Add("maxCreatedTime", (*args.MaxCreatedTime).AsQueryParameter())
961961
}
962962
if args.QueryOrder != nil {
963963
queryParams.Add("queryOrder", string(*args.QueryOrder))

azuredevops/workitemtracking/client.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1715,7 +1715,7 @@ func (client *ClientImpl) GetReportingLinksByLinkType(ctx context.Context, args
17151715
queryParams.Add("continuationToken", *args.ContinuationToken)
17161716
}
17171717
if args.StartDateTime != nil {
1718-
queryParams.Add("startDateTime", (*args.StartDateTime).String())
1718+
queryParams.Add("startDateTime", (*args.StartDateTime).AsQueryParameter())
17191719
}
17201720
locationId, _ := uuid.Parse("b5b5b6d0-0308-40a1-b3f4-b9bb3c66878f")
17211721
resp, err := client.Client.Send(ctx, http.MethodGet, locationId, "5.1", routeValues, queryParams, nil, "", "application/json", nil)
@@ -2774,7 +2774,7 @@ func (client *ClientImpl) ReadReportingRevisionsGet(ctx context.Context, args Re
27742774
queryParams.Add("continuationToken", *args.ContinuationToken)
27752775
}
27762776
if args.StartDateTime != nil {
2777-
queryParams.Add("startDateTime", (*args.StartDateTime).String())
2777+
queryParams.Add("startDateTime", (*args.StartDateTime).AsQueryParameter())
27782778
}
27792779
if args.IncludeIdentityRef != nil {
27802780
queryParams.Add("includeIdentityRef", strconv.FormatBool(*args.IncludeIdentityRef))
@@ -2851,7 +2851,7 @@ func (client *ClientImpl) ReadReportingRevisionsPost(ctx context.Context, args R
28512851
queryParams.Add("continuationToken", *args.ContinuationToken)
28522852
}
28532853
if args.StartDateTime != nil {
2854-
queryParams.Add("startDateTime", (*args.StartDateTime).String())
2854+
queryParams.Add("startDateTime", (*args.StartDateTime).AsQueryParameter())
28552855
}
28562856
if args.Expand != nil {
28572857
queryParams.Add("$expand", string(*args.Expand))

0 commit comments

Comments
 (0)