blob: 2a6b00d07f7a3c25e9a9e61b42020942275c761c [file] [log] [blame]
package tc
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import (
"bytes"
"encoding/json"
"errors"
"fmt"
"testing"
"time"
)
func TestStatus(t *testing.T) {
type tester struct {
st RequestStatus
name string
}
tests := []tester{
tester{RequestStatus("foo"), "invalid"},
tester{RequestStatusDraft, "draft"},
tester{RequestStatusSubmitted, "submitted"},
tester{RequestStatusRejected, "rejected"},
tester{RequestStatusPending, "pending"},
tester{RequestStatusComplete, "complete"},
}
for _, tst := range tests {
v, _ := RequestStatusFromString(tst.name)
if tst.name != string(v) {
t.Errorf("%v: expected %s, got %s", tst, tst.name, string(v))
}
}
}
func TestStatusTransition(t *testing.T) {
bad := errors.New("bad error")
var validTests = [][]error{
// To: Dra Sub Rej Pen Com // From:
[]error{nil, nil, bad, bad, bad}, // Draft
[]error{nil, nil, nil, nil, nil}, // Submitted
[]error{bad, bad, bad, bad, bad}, // Rejected
[]error{bad, bad, bad, nil, nil}, // Pending
[]error{bad, bad, bad, bad, bad}, // Complete
}
// test all transitions
for i := range validTests {
from := RequestStatuses[i]
for j, exp := range validTests[i] {
to := RequestStatuses[j]
if exp != nil {
if from == RequestStatusRejected || from == RequestStatusComplete {
exp = errors.New(string(from) + " request cannot be changed")
} else {
exp = errors.New("invalid transition from " + string(from) + " to " + string(to))
}
}
got := from.ValidTransition(to)
if got == exp {
continue
}
if got != nil && exp != nil && got.Error() == exp.Error() {
continue
}
t.Errorf("%s -> %s : expected %++v, got %++v", string(from), string(to), exp, got)
}
}
}
func TestRequestStatusJSON(t *testing.T) {
b, err := json.Marshal(RequestStatusDraft)
if err != nil {
t.Errorf("Error marshalling %v: %s", RequestStatusDraft, err.Error())
}
exp := []byte(`"draft"`)
if !bytes.Equal(exp, b) {
t.Errorf("expected %s, got %s", exp, string(b))
}
var r RequestStatus
err = json.Unmarshal([]byte(b), &r)
if err != nil {
t.Errorf("Error unmarshalling %s: %v", b, err)
}
if r != RequestStatusDraft {
t.Errorf("expected %v, got %v", RequestStatusDraft, r)
}
}
func ExampleDSRChangeType_UnmarshalJSON() {
var dsrct DSRChangeType
raw := `"CREATE"`
if err := json.Unmarshal([]byte(raw), &dsrct); err != nil {
fmt.Printf("Error: %v\n", err)
return
}
fmt.Printf("Parsed DSRCT: '%s'\n", dsrct.String())
raw = `"something invalid"`
if err := json.Unmarshal([]byte(raw), &dsrct); err != nil {
fmt.Printf("Error: %v\n", err)
return
}
fmt.Printf("Parsed DSRCT: '%s'\n", dsrct.String())
// Output: Parsed DSRCT: 'create'
// Error: invalid Delivery Service Request changeType: 'something invalid'
}
func ExampleDeliveryServiceRequestV40_String() {
var dsr DeliveryServiceRequestV40
fmt.Println(dsr.String())
// Output: DeliveryServiceRequestV40(Assignee=<nil>, AssigneeID=<nil>, Author="", AuthorID=<nil>, ChangeType="", CreatedAt=0001-01-01T00:00:00Z, ID=<nil>, LastEditedBy="", LastEditedByID=<nil>, LastUpdated=0001-01-01T00:00:00Z, Status="")
}
func TestDeliveryServiceRequestV40_Downgrade(t *testing.T) {
xmlid := "xmlid"
dsr := DeliveryServiceRequestV40{
Assignee: nil,
AssigneeID: nil,
Author: "author",
AuthorID: nil,
ChangeType: DSRChangeTypeCreate,
CreatedAt: time.Time{},
ID: nil,
LastEditedBy: "last edited by",
LastEditedByID: nil,
LastUpdated: time.Now(),
Requested: &DeliveryServiceV4{},
Status: RequestStatusComplete,
}
dsr.Requested.XMLID = &xmlid
downgraded := dsr.Downgrade()
if downgraded.Assignee != nil {
t.Errorf("Incorrect Assignee; want: <nil>, got: %s", *downgraded.Assignee)
}
if downgraded.AssigneeID != nil {
t.Errorf("Incorrect Assignee ID; want: <nil>, got: %d", *downgraded.AssigneeID)
}
if downgraded.Author == nil {
t.Errorf("Incorrect Author; want: '%s', got: <nil>", dsr.Author)
} else if *downgraded.Author != dsr.Author {
t.Errorf("Incorrect Author; want: '%s', got: '%s'", dsr.Author, *downgraded.Author)
}
if downgraded.AuthorID != nil {
t.Errorf("Incorrect AuthorID; want: <nil>, got: %v", *downgraded.AuthorID)
}
if downgraded.ChangeType == nil {
t.Errorf("Incorrect ChangeType; want: '%s', got: <nil>", dsr.ChangeType)
} else if *downgraded.ChangeType != dsr.ChangeType.String() {
t.Errorf("Incorrect ChangeType; want: '%s', got: '%s'", dsr.ChangeType, *downgraded.ChangeType)
}
if downgraded.CreatedAt == nil {
t.Errorf("Incorrect CreatedAt; want: %v, got: <nil>", dsr.CreatedAt)
} else if !dsr.CreatedAt.Equal(downgraded.CreatedAt.Time) {
t.Errorf("Incorrect CreatedAt; want: %v, got: %v", dsr.CreatedAt, *downgraded.CreatedAt)
}
if downgraded.DeliveryService == nil {
t.Errorf("DeliveryService was unexpectedly nil")
}
if downgraded.ID != nil {
t.Errorf("Incorrect ID; want: <nil>, got: %d", *downgraded.ID)
}
if downgraded.LastEditedBy == nil {
t.Errorf("Incorrect LastEditedBy; want: '%s', got: <nil>", dsr.LastEditedBy)
} else if *downgraded.LastEditedBy != dsr.LastEditedBy {
t.Errorf("Incorrect LastEditedBy; want: '%s', got: '%s'", dsr.LastEditedBy, *downgraded.LastEditedBy)
}
if downgraded.LastEditedByID != nil {
t.Errorf("Incorrect LastEditedByID; want: <nil>, got: %d", *downgraded.LastEditedByID)
}
if downgraded.LastUpdated == nil {
t.Errorf("Incorrect LastUpdated; want: %v, got: <nil>", dsr.LastUpdated)
} else if !dsr.LastUpdated.Equal(downgraded.LastUpdated.Time) {
t.Errorf("Incorrect LastUpdated; want: %v, got: %v", dsr.LastUpdated, *downgraded.LastUpdated)
}
if downgraded.Status == nil {
t.Errorf("Incorrect Status; want: '%s', got: <nil>", dsr.Status)
} else if *downgraded.Status != dsr.Status {
t.Errorf("Incorrect Status; want: '%s', got: '%s'", dsr.Status, *downgraded.Status)
}
if downgraded.XMLID == nil {
t.Errorf("Incorrect XMLID; want: '%s', got: <nil>", xmlid)
} else if *downgraded.XMLID != xmlid {
t.Errorf("Incorrect XMLID; want: '%s', got: '%s'", xmlid, *downgraded.XMLID)
}
}
func ExampleDeliveryServiceRequestV40_SetXMLID() {
var dsr DeliveryServiceRequestV40
fmt.Println(dsr.XMLID == "")
dsr.Requested = new(DeliveryServiceV4)
dsr.Requested.XMLID = new(string)
*dsr.Requested.XMLID = "test"
dsr.SetXMLID()
fmt.Println(dsr.XMLID)
// Output: true
// test
}