{"id":17787684,"url":"https://github.com/atwayne/testserver","last_synced_at":"2025-04-02T00:20:59.022Z","repository":{"id":74600485,"uuid":"450999699","full_name":"atwayne/TestServer","owner":"atwayne","description":"Create an HttpClient instance that can be injected to your unit tests","archived":false,"fork":false,"pushed_at":"2022-01-24T07:42:52.000Z","size":24,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-02-07T15:44:53.321Z","etag":null,"topics":["httpclient","mock-httpclient","mock-server","testserver","unittest"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/atwayne.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-01-23T04:01:48.000Z","updated_at":"2022-11-01T01:20:05.000Z","dependencies_parsed_at":null,"dependency_job_id":"304b647e-0907-41bb-810e-79e6103cda59","html_url":"https://github.com/atwayne/TestServer","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/atwayne%2FTestServer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/atwayne%2FTestServer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/atwayne%2FTestServer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/atwayne%2FTestServer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/atwayne","download_url":"https://codeload.github.com/atwayne/TestServer/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246731069,"owners_count":20824501,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["httpclient","mock-httpclient","mock-server","testserver","unittest"],"created_at":"2024-10-27T10:12:29.722Z","updated_at":"2025-04-02T00:20:58.999Z","avatar_url":"https://github.com/atwayne.png","language":"C#","readme":"# TestServer\n\n`TestServer` is designed for unit test. It generates an `HttpClient` instance that you can inject to your service.\n\n## Get Started\n\n1. Install the package by nuget\n    ```bash\n    dotnet add package Dubstep.TestUtilities.TestServer\n    ```\n2. Create a `TestServer` instance by `new TestServer()`\n3. Configure `RuleSet` of the `TestServer` instance\n4. Generate a HttpClient by `CreateClient()`\n\n## Example\n```csharp\n// The default vaule when not match found is a HttpNotFound response\n// It can be changed by SetDefaultAction\nserver.CurrentRuleSet\n    .SetDefaultAction(async (response) =\u003e\n    {\n        response.StatusCode = 500;\n        await response.WriteAsync(\"Simon says server error\");\n    });\n\n// Return OK response for every request\nserver.CurrentRuleSet\n    .AddRule()\n    .SetOkResponse(\"ok\");\n\n// Return Bad Request for every request\nserver.CurrentRuleSet\n    .AddRule()\n    .SetBadRequest();\n\n// Return OK response for every HTTP GET request\nserver.CurrentRuleSet\n    .AddRule()\n    .WhenGet()\n    .SetOkResponse(\"ok\");\n\n// Return OK response for every HTTP Get request that matches an url patter\nvar urlPattern = \"\\\\?id=1\";\nserver.CurrentRuleSet\n    .AddRule()\n    .WhenUrlMatch(urlPattern)\n    .SetOkResponse(\"ok\")\n\n// Return OK response for every HTTP request that has expected header\nserver.CurrentRuleSet\n    .AddRule()\n    .WhenHeaderMatch(\"User-Agent\", expectedUserAgent)\n    .SetOkResponse(\"ok\");\n\n// You can chain your configuration, if the request matches mutiple rules, the first match will be picked\nvar firstPattern = \"\\\\?id=1\";\nvar secondPattern = \"\\\\?id=*\";\n\nserver.CurrentRuleSet\n    .AddRule()\n    .WhenUrlMatch(firstPattern)\n    .SetOkResponse(\"ok-1\")\n    .AddRule()\n    .WhenUrlMatch(secondPattern)\n    .SetOkResponse(\"ok-2\");\n\n// Expire the rule after a certain count of match, once the rule has expired, it will never match a request\nserver.CurrentRuleSet\n    .AddRule()\n    .SetMaxMatchCount(1)\n    .SetOkResponse(okResponse);\n\n// Return Ok response on the first request, and Ok response with a different content on the second request\nserver.CurrentRuleSet\n    .AddRule()\n    .SetMaxMatchCount(1)\n    .SetOkResponse(\"ok-1\");\n    .AddRule()\n    .SetOkResponse(\"ok-2\");\n\n// Generate a HttpClient instance\nvar httpClient = server.CreateClient();\n\n// Apply a HttpMessageHandler to the client\nvar httpClient = server.CreateClient(new AddAuthorizationHandler());\n```\n\nCheck [the unit test cases](https://github.com/atwayne/TestServer/blob/master/test/TestServer.Tests/TestServerTests.cs) for more examples\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fatwayne%2Ftestserver","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fatwayne%2Ftestserver","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fatwayne%2Ftestserver/lists"}