Skip to content

Commit

Permalink
add another test and get it to pass
Browse files Browse the repository at this point in the history
  • Loading branch information
kurtinlane committed Oct 9, 2024
1 parent c51714f commit c18b9cc
Show file tree
Hide file tree
Showing 5 changed files with 218 additions and 0 deletions.
53 changes: 53 additions & 0 deletions examples/tests/customparamnotbuilding/message.proto
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
// Copyright 2020 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.
//

syntax = "proto3";

package tests.customparams.message.v1;

import "google/api/annotations.proto";
import "openapi/annotations.proto";

option go_package = "github.com/google/gnostic/apps/protoc-gen-openapi/examples/tests/bodymapping/message/v1;message";

option (openapi.file_params) = { headers: [{ name:"FileHeader" }]};

service Messaging {
option (openapi.service_params) = {
headers:
[
{
name:"ServiceHeader",
pattern:"^(.*)$"
description:"This is a service header"
required:true,
}
],
build_tags: ["postman"]
};
// Update Message Summary | This function updates a message.
// (-- api-linter: core::0xxx::xxx=disabled
// aip.dev/not-precedent: We need to do this because reasons. --)
rpc UpdateMessage(Message) returns(Message) {
option (google.api.http) = {
patch: "/v1/messages/{message_id}"
body: "text"
};
}
}
message Message {
string message_id = 1;
string text = 2;
}
82 changes: 82 additions & 0 deletions examples/tests/customparamnotbuilding/openapi.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
# Generated with protoc-gen-openapi
# https://github.com/kollalabs/protoc-gen-openapi

openapi: 3.0.3
info:
title: Messaging API
version: 0.0.1
paths:
/v1/messages/{message_id}:
patch:
tags:
- Messaging
summary: Update Message Summary
description: This function updates a message.
operationId: Messaging_UpdateMessage
parameters:
- name: message_id
in: path
required: true
schema:
type: string
- name: ServiceHeader
in: header
description: This is a service header
required: true
schema:
pattern: ^(.*)$
type: string
requestBody:
content:
application/json:
schema:
type: string
required: true
responses:
"200":
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/Message'
default:
description: Default error response
content:
application/json:
schema:
$ref: '#/components/schemas/Status'
components:
schemas:
GoogleProtobufAny:
type: object
properties:
'@type':
type: string
description: The type of the serialized message.
additionalProperties: true
description: Contains an arbitrary serialized message along with a @type that describes the type of the serialized message.
Message:
type: object
properties:
message_id:
type: string
text:
type: string
Status:
type: object
properties:
code:
type: integer
description: The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code].
format: int32
message:
type: string
description: A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the [google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client.
details:
type: array
items:
$ref: '#/components/schemas/GoogleProtobufAny'
description: A list of messages that carry the error details. There is a common set of message types for APIs to use.
description: 'The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status` message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors).'
tags:
- name: Messaging
75 changes: 75 additions & 0 deletions examples/tests/customparamnotbuilding/openapi_json.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
# Generated with protoc-gen-openapi
# https://github.com/kollalabs/protoc-gen-openapi

openapi: 3.0.3
info:
title: Messaging API
version: 1.2.3
paths:
/v1/messages/{messageId}:
patch:
tags:
- Messaging
summary: Update Message Summary
description: This function updates a message.
operationId: Messaging_UpdateMessage
parameters:
- name: messageId
in: path
required: true
schema:
type: string
requestBody:
content:
application/json:
schema:
type: string
required: true
responses:
"200":
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/Message'
default:
description: Default error response
content:
application/json:
schema:
$ref: '#/components/schemas/Status'
components:
schemas:
GoogleProtobufAny:
type: object
properties:
'@type':
type: string
description: The type of the serialized message.
additionalProperties: true
description: Contains an arbitrary serialized message along with a @type that describes the type of the serialized message.
Message:
type: object
properties:
messageId:
type: string
text:
type: string
Status:
type: object
properties:
code:
type: integer
description: The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code].
format: int32
message:
type: string
description: A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the [google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client.
details:
type: array
items:
$ref: '#/components/schemas/GoogleProtobufAny'
description: A list of messages that carry the error details. There is a common set of message types for APIs to use.
description: 'The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status` message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors).'
tags:
- name: Messaging
6 changes: 6 additions & 0 deletions generator/openapi-v3.go
Original file line number Diff line number Diff line change
Expand Up @@ -837,6 +837,12 @@ func (g *OpenAPIv3Generator) addPathsToDocumentV3(d *v3.Document, services []*pr
}
}
}
log.Print(doGenerate)

if *g.conf.BuildTag == "postman" { //always generate for postman build_tag
doGenerate = true
}

if doGenerate {
if methodName != "" {

Expand Down
2 changes: 2 additions & 0 deletions plugin_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ var openapiTests = []struct {
{name: "Custom Params", path: "examples/tests/customparams/", protofile: "message.proto"},
{name: "Custom Params with build tag set", path: "examples/tests/customparamsbuildtag/", protofile: "message.proto", buildTag: "postman"},
{name: "Custom Params with build tag set for excluding method", path: "examples/tests/customparamsexclude/", protofile: "message.proto", buildTag: "public_docs"},
{name: "Custom Params with build tag set not building", path: "examples/tests/customparamnotbuilding/", protofile: "message.proto", buildTag: "postman"},
}

func TestOpenAPIProtobufNaming(t *testing.T) {
Expand All @@ -63,6 +64,7 @@ func TestOpenAPIProtobufNaming(t *testing.T) {
path.Join(tt.path, tt.protofile),
openAPICommand,
}
fmt.Printf("Running protoc %s\n", strings.Join(cmd, " "))
out, err := exec.Command("protoc", cmd...).CombinedOutput()
if err != nil {
fmt.Println(string(out))
Expand Down

0 comments on commit c18b9cc

Please sign in to comment.