https://pact.io logo
#pact-broker
Title
# pact-broker
j

João Farias

03/17/2022, 10:03 AM
Hi folks, I am trying to follow the bi-directional contracts tutorial, but I am having trouble on Step 10. When I have to comment out the price field, I am getting a 409 - Conflict error at publishing the new OAS contract. Basically what I did was to add a # before each price: string + removing the whole entry on components.schemas.Product.properties. Here is my OAS contract. Am I doing something wrong? You can find my current contract here: https://thatsabug.pactflow.io/contracts/bi-directional/provider/pactflow-example-provid[…]ountebank/version/d1db1c-master%2Bd1db1c/provider-contract
Copy code
openapi: 3.0.1
info:
  title: Product API
  description: Pactflow Product API demo
  version: 1.0.0
paths:
  /products:
    post:
      summary: Create a product
      description: Creates a new product
      operationId: createProduct
      requestBody:
        description: Create a new Product
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Product'
            examples:
              application/json:
                value:
                  id: "1234"
                  type: "food"
                  # price: 42
      responses:
        "200":
          description: successful operation
          content:
            "application/json; charset=utf-8":
              schema:
                oneOf:
                  - $ref: '#/components/schemas/Product'
              examples:
                application/json:
                  value:
                    id: "1234"
                    type: "food"
                    # price: 42
    get:
      summary: List all products
      description: Returns all products
      operationId: getAllProducts
      responses:
        "200":
          description: successful operation
          content:
            "application/json; charset=utf-8":
              schema:
                type: "array"
                items:
                  $ref: '#/components/schemas/Product'
              examples:
                application/json:
                  value:
                    - id: "1234"
                      type: "food"
                      # price: 42
                      # name: "pizza"
                      # version: "1.0.0"
                      # see <https://github.com/apiaryio/dredd/issues/1430> for why
        "400":
          description: Invalid ID supplied
          content: {}
  /product/{id}:
    get:
      summary: Find product by ID
      description: Returns a single product
      operationId: getProductByID
      parameters:
      - name: id
        in: path
        description: ID of product to get
        schema:
          type: string
        required: true
        example: 10
      responses:
        "200":
          description: successful operation
          content:
            "application/json; charset=utf-8":
              schema:
                $ref: '#/components/schemas/Product'
              examples:
                application/json:
                  value:
                    id: "1234"
                    type: "food"
                    # price: 42
                    # name: "pizza"
                    # version: "1.0.0"
                    # see <https://github.com/apiaryio/dredd/issues/1430> for why
        "400":
          description: Invalid ID supplied
          content: {}
        "404":
          description: Product not found
          content: {}
components:
  schemas:
    Product:
      type: object
      required:
        - id
        - name
        #- # price
      additionalProperties: false # WARNING! without this, a consumer can add stuff that doesn't exist! See also <https://bitbucket.org/atlassian/swagger-mock-validator/issues/84/test-incorrectly-passes-when-mock-expects>
      properties:
        id:
          type: string
        type:
          type: string
        name:
          type: string
        version:
          type: string
        # price:
          #type: number
👋 1
m

Matt (pactflow.io / pact-js / pact-go)

03/17/2022, 10:15 AM
I think you’ll only get a
409
if you try publishing with the exact same version - are you bumping the version?
i.e. Pactflow (by default now) prevents you overriding a version of a contract, because it could invalidate a previously successful can-i-deploy result
j

João Farias

03/17/2022, 11:10 AM
Indeed. I've changed the OAS version and I could upload. Thanks @Matt (pactflow.io / pact-js / pact-go) Probably it is obvious for people who understand OAS written-by-hand, but for a newbie like me, it wasn't 😄
🙌 1
m

Matt (pactflow.io / pact-js / pact-go)

03/17/2022, 11:13 AM
hahah glad to hear it’s solved!
How’d you find the katacoda?