Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

MinType always returning just one element #522

Copy link
Copy link
@javiplay

Description

@javiplay
Issue body actions

Previous issues
Have you searched the issue tracker to ensure this hasn't been discussed before?
Yes but I did not find any discussion on this.

Version information:

  • OS: Windows x64
  • PactNet Version: 4.5
  • .Net Version: 6

Describe the bug
When creating contract using MinType to return at least a number of elements in array property only one element is returned by the fake server.

Steps To Reproduce

 pact
     .UponReceiving("A request to get some things")
     .Given("There are some things")
     .WithRequest(HttpMethod.Get, "/api/things")
     .WithHeader("Accept", "application/json")
 .WillRespond()
     .WithStatus(HttpStatusCode.OK)
     .WithHeader("Content-Type", "application/json; charset=utf-8")
     .WithJsonBody((
         Match.MinType(new
         {
             thingId = Match.Regex("2", "^\\d+$"),
             thingName = Match.Regex("SecondThing", "^\\w{1,12}$")
         }, 3)));

 await pact.VerifyAsync(async ctx => {
     var thingsRepository = new HttpThingsRepository(ctx.MockServerUri.ToString());
     var things = await thingsRepository.GetThings();
     Assert.Equal(3, things.Count);
 });

Expected behavior
I would expect the server to return 3 elements instead of one.

Log Output
This is the generated contract (after forcing test to pass by expecting one element)

{
  "consumer": {
    "name": "systemtestconsumer-win32nt"
  },
  "interactions": [
    {
      "description": "A request to get some things",
      "providerStates": [
        {
          "name": "There are some things"
        }
      ],
      "request": {
        "headers": {
          "Accept": "application/json"
        },
        "method": "GET",
        "path": "/api/things"
      },
      "response": {
        "body": [
          {
            "thingId": "2",
            "thingName": "SecondThing"
          }
        ],
        "headers": {
          "Content-Type": "application/json; charset=utf-8"
        },
        "matchingRules": {
          "body": {
            "$": {
              "combine": "AND",
              "matchers": [
                {
                  "match": "type",
                  "min": 3
                }
              ]
            },
            "$[*].thingId": {
              "combine": "AND",
              "matchers": [
                {
                  "match": "regex",
                  "regex": "^\\d+$"
                }
              ]
            },
            "$[*].thingName": {
              "combine": "AND",
              "matchers": [
                {
                  "match": "regex",
                  "regex": "^\\w{1,12}$"
                }
              ]
            }
          },
          "header": {}
        },
        "status": 200
      }
    }
  ],
  "metadata": {
    "pactRust": {
      "ffi": "0.4.0",
      "models": "1.0.4"
    },
    "pactSpecification": {
      "version": "3.0.0"
    }
  },
  "provider": {
    "name": "systemthingsserver-win32nt"
  }
}

Additional context
In previous version it was returning the number of items specified in the contract, this is how it was before:

{
  "consumer": {
    "name": "systemtestconsumer"
  },
  "provider": {
    "name": "systemthingsserver"
  },
  "interactions": [
    {
      "description": "A Get request to '/api/things'",
      "providerState": "There are some things",
      "request": {
        "method": "get",
        "path": "/api/things",
        "headers": {
        }
      },
      "response": {
        "status": 200,
        "headers": {
          "Content-Type": "application/json; charset=utf-8"
        },
        "body": [
          {
            "thingId": "2",
            "thingName": "SecondThing"
          },
          {
            "thingId": "2",
            "thingName": "SecondThing"
          },
          {
            "thingId": "2",
            "thingName": "SecondThing"
          }
        ],
        "matchingRules": {
          "$.body": {
            "min": 3
          },
          "$.body[*].*": {
            "match": "type"
          },
          "$.body[*].thingId": {
            "match": "regex",
            "regex": "^\\d+$"
          },
          "$.body[*].thingName": {
            "match": "regex",
            "regex": "^\\w{1,12}$"
          }
        }
      }
    }
  ],
  "metadata": {
    "pactSpecification": {
      "version": "2.0.0"
    }
  }
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugIndicates an unexpected problem or unintended behaviorIndicates an unexpected problem or unintended behaviorupstreamIndicates that an issue relates to an upstream problem (such as in pact-reference)Indicates that an issue relates to an upstream problem (such as in pact-reference)

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions

      Morty Proxy This is a proxified and sanitized view of the page, visit original site.