// Copyright 2019 Google LLC // // Licensed 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. package bigquery import ( "testing" "time" "cloud.google.com/go/internal/testutil" "github.com/google/go-cmp/cmp/cmpopts" bq "google.golang.org/api/bigquery/v2" ) func TestBQToModelMetadata(t *testing.T) { aTime := time.Date(2019, 3, 14, 0, 0, 0, 0, time.Local) aTimeMillis := aTime.UnixNano() / 1e6 for _, test := range []struct { in *bq.Model want *ModelMetadata }{ {&bq.Model{}, &ModelMetadata{}}, { &bq.Model{ CreationTime: aTimeMillis, Description: "desc", Etag: "etag", ExpirationTime: aTimeMillis, EncryptionConfiguration: &bq.EncryptionConfiguration{KmsKeyName: "keyName"}, FriendlyName: "fname", LastModifiedTime: aTimeMillis, Location: "loc", Labels: map[string]string{"a": "b"}, }, &ModelMetadata{ CreationTime: aTime.Truncate(time.Millisecond), Description: "desc", ETag: "etag", ExpirationTime: aTime.Truncate(time.Millisecond), Name: "fname", LastModifiedTime: aTime.Truncate(time.Millisecond), EncryptionConfig: &EncryptionConfig{KMSKeyName: "keyName"}, Location: "loc", Labels: map[string]string{"a": "b"}, }, }, } { got, err := bqToModelMetadata(test.in) if err != nil { t.Fatal(err) } if diff := testutil.Diff(got, test.want, cmpopts.IgnoreUnexported(ModelMetadata{})); diff != "" { t.Errorf("%+v:\n, -got, +want:\n%s", test.in, diff) } } } func TestModelMetadataUpdateToBQ(t *testing.T) { aTime := time.Date(2019, 3, 14, 0, 0, 0, 0, time.Local) aTimeMillis := aTime.UnixNano() / 1e6 for _, test := range []struct { in ModelMetadataToUpdate want *bq.Model }{ { ModelMetadataToUpdate{}, &bq.Model{}, }, { ModelMetadataToUpdate{ Description: "d", Name: "n", }, &bq.Model{ Description: "d", FriendlyName: "n", ForceSendFields: []string{"Description", "FriendlyName"}, }, }, { ModelMetadataToUpdate{ ExpirationTime: aTime, }, &bq.Model{ ExpirationTime: aTimeMillis, ForceSendFields: []string{"ExpirationTime"}, }, }, { ModelMetadataToUpdate{ labelUpdater: labelUpdater{ setLabels: map[string]string{"L": "V"}, deleteLabels: map[string]bool{"D": true}, }, }, &bq.Model{ Labels: map[string]string{"L": "V"}, NullFields: []string{"Labels.D"}, }, }, } { got, err := test.in.toBQ() if err != nil { t.Fatalf("%+v: %v", test.in, err) } if diff := testutil.Diff(got, test.want); diff != "" { t.Errorf("%+v:\n-got, +want:\n%s", test.in, diff) } } }