github.com/googleapis/api-linter@v1.65.2/rules/aip0134/response_message_name_test.go (about) 1 // Copyright 2019 Google LLC 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // https://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 package aip0134 16 17 import ( 18 "testing" 19 20 "github.com/googleapis/api-linter/rules/internal/testutils" 21 ) 22 23 func TestResponseMessageName(t *testing.T) { 24 // Set up the testing permutations. 25 tests := []struct { 26 testName string 27 MethodName string 28 RespTypeName string 29 LRO bool 30 problems testutils.Problems 31 }{ 32 {"ValidResource", "UpdateBook", "Book", false, testutils.Problems{}}, 33 {"ValidLRO", "UpdateBook", "Book", true, testutils.Problems{}}, 34 {"ValidLROContainingOperation", "UpdateUnitOperation", "UnitOperation", true, testutils.Problems{}}, 35 {"Invalid", "UpdateBook", "UpdateBookResponse", false, testutils.Problems{{Suggestion: "Book"}}}, 36 {"InvalidLRO", "UpdateBook", "UpdateBookResponse", true, testutils.Problems{{Suggestion: "Book"}}}, 37 {"Irrelevant", "MutateBook", "MutateBookResponse", false, testutils.Problems{}}, 38 } 39 40 // Run each test individually. 41 for _, test := range tests { 42 t.Run(test.testName, func(t *testing.T) { 43 // Create a minimal service with a AIP-134 Update method 44 file := testutils.ParseProto3Tmpl(t, ` 45 import "google/longrunning/operations.proto"; 46 service Library { 47 rpc {{.MethodName}}({{.MethodName}}Request) 48 returns ({{ if .LRO }}google.longrunning.Operation{{ else }}{{ .RespTypeName }}{{ end }}) { 49 {{ if .LRO -}} 50 option (google.longrunning.operation_info) = { 51 response_type: "{{.RespTypeName}}" 52 metadata_type: "{{.MethodName}}Metadata" 53 }; 54 {{ end -}} 55 } 56 } 57 message {{.MethodName}}Request {} 58 message {{.RespTypeName}} {} 59 `, test) 60 61 // Run the lint rule, and establish that it returns the correct 62 // number of problems. 63 problems := responseMessageName.Lint(file) 64 method := file.GetServices()[0].GetMethods()[0] 65 if diff := test.problems.SetDescriptor(method).Diff(problems); diff != "" { 66 t.Errorf(diff) 67 } 68 }) 69 } 70 }