forked from loafle/openapi-generator-original
Dart fix template tests (#4015)
* Clean up samples directory before fixing tests - removed from samples/client/petstore/dart2 : - purge_test.sh (doesn't seem to be used and not helpful) - openapi folder (is to be re-generated with more meaningful name) - updated dart2-petstore.sh to generate client library with new name - used updated shell script to re-generate client library - updated CI/.drone.yml to use the new client library for tests * Update petstore tests to use faked http client - skipped all of the tests that hit a live endpoint - made a fake http client that can be set to check for expected values and/or return a provided response - added some files with test data recorded from live api calls - updated the README to reflect changes to tests * Update .drone.yml so CI will run the tests
This commit is contained in:
parent
8383f26616
commit
41acae19e4
@ -13,7 +13,7 @@ steps:
|
|||||||
commands:
|
commands:
|
||||||
- (cd samples/client/petstore/dart-jaguar/openapi && pub get && pub run build_runner build --delete-conflicting-outputs)
|
- (cd samples/client/petstore/dart-jaguar/openapi && pub get && pub run build_runner build --delete-conflicting-outputs)
|
||||||
- (cd samples/client/petstore/dart-jaguar/flutter_petstore/openapi && pub get && pub run build_runner build --delete-conflicting-outputs)
|
- (cd samples/client/petstore/dart-jaguar/flutter_petstore/openapi && pub get && pub run build_runner build --delete-conflicting-outputs)
|
||||||
- (cd samples/client/petstore/dart2/openapi && pub get && pub run test)
|
- (cd samples/client/petstore/dart2/petstore && pub get && pub run test)
|
||||||
# test Java 11 HTTP client
|
# test Java 11 HTTP client
|
||||||
- name: java11-test
|
- name: java11-test
|
||||||
image: openjdk:11.0
|
image: openjdk:11.0
|
||||||
|
@ -29,5 +29,5 @@ fi
|
|||||||
export JAVA_OPTS="${JAVA_OPTS} -Xmx1024M -DloggerPath=conf/log4j.properties"
|
export JAVA_OPTS="${JAVA_OPTS} -Xmx1024M -DloggerPath=conf/log4j.properties"
|
||||||
|
|
||||||
# Generate client
|
# Generate client
|
||||||
ags="generate -t modules/openapi-generator/src/main/resources/dart2 -i modules/openapi-generator/src/test/resources/2_0/petstore.yaml -g dart -o samples/client/petstore/dart2/openapi --additional-properties hideGenerationTimestamp=true $@"
|
ags="generate -t modules/openapi-generator/src/main/resources/dart2 -i modules/openapi-generator/src/test/resources/2_0/petstore.yaml -g dart -o samples/client/petstore/dart2/petstore_client_lib --additional-properties hideGenerationTimestamp=true $@"
|
||||||
java $JAVA_OPTS -jar $executable $ags
|
java $JAVA_OPTS -jar $executable $ags
|
||||||
|
@ -1,3 +1,29 @@
|
|||||||
|
# Background
|
||||||
|
|
||||||
|
## Current state of tests
|
||||||
|
|
||||||
|
TL;DR currently the only tests are e2e tests that were adapted to use a faked http client. While pushing data around as a smoke test has some value, more testing is required. In particular we need comprehensive unit/integration tests.
|
||||||
|
|
||||||
|
- an old set of e2e tests are skipped for CI, as they hit a live endpoint and so are inherently flaky
|
||||||
|
- `pet_test.dart`
|
||||||
|
- `store_test.dart`
|
||||||
|
- `user_test.dart`
|
||||||
|
- the above set of tests were adapted to use a faked http client
|
||||||
|
- the tests are not really well suited to being used with a stubbed client, many are basically just testing the endpoint logic
|
||||||
|
- while not a great set of tests, they do have some value as a smoke test for template changes
|
||||||
|
- the adapted tests and files that contain test data:
|
||||||
|
- `pet_test_fake_client.dart`
|
||||||
|
- `store_test_fake_client.dart`
|
||||||
|
- `user_test_fake_client.dart`
|
||||||
|
- `fake_client.dart`
|
||||||
|
- `file_upload_response.json`
|
||||||
|
|
||||||
|
## Assumptions
|
||||||
|
|
||||||
|
- the tests will be run as part of CI and so have access to dart:io
|
||||||
|
|
||||||
|
# Running
|
||||||
|
|
||||||
## If not already done, resolve dependencies
|
## If not already done, resolve dependencies
|
||||||
|
|
||||||
`pub get`
|
`pub get`
|
||||||
@ -8,4 +34,4 @@
|
|||||||
|
|
||||||
## To run all tests in the test folder:
|
## To run all tests in the test folder:
|
||||||
|
|
||||||
`pub run test test`
|
`pub run test`
|
||||||
|
355
samples/client/petstore/dart2/petstore/pubspec.lock
Normal file
355
samples/client/petstore/dart2/petstore/pubspec.lock
Normal file
@ -0,0 +1,355 @@
|
|||||||
|
# Generated by pub
|
||||||
|
# See https://dart.dev/tools/pub/glossary#lockfile
|
||||||
|
packages:
|
||||||
|
analyzer:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: analyzer
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "0.38.4"
|
||||||
|
args:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: args
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "1.5.2"
|
||||||
|
async:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: async
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "2.3.0"
|
||||||
|
boolean_selector:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: boolean_selector
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "1.0.5"
|
||||||
|
charcode:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: charcode
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "1.1.2"
|
||||||
|
collection:
|
||||||
|
dependency: "direct dev"
|
||||||
|
description:
|
||||||
|
name: collection
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "1.14.12"
|
||||||
|
convert:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: convert
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "2.1.1"
|
||||||
|
crypto:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: crypto
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "2.1.3"
|
||||||
|
csslib:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: csslib
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "0.16.1"
|
||||||
|
front_end:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: front_end
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "0.1.26"
|
||||||
|
glob:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: glob
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "1.1.7"
|
||||||
|
html:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: html
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "0.14.0+2"
|
||||||
|
http:
|
||||||
|
dependency: "direct dev"
|
||||||
|
description:
|
||||||
|
name: http
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "0.12.0+2"
|
||||||
|
http_multi_server:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: http_multi_server
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "2.1.0"
|
||||||
|
http_parser:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: http_parser
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "3.1.3"
|
||||||
|
io:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: io
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "0.3.3"
|
||||||
|
js:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: js
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "0.6.1+1"
|
||||||
|
kernel:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: kernel
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "0.3.26"
|
||||||
|
matcher:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: matcher
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "0.12.5"
|
||||||
|
meta:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: meta
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "1.1.7"
|
||||||
|
mime:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: mime
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "0.9.6+3"
|
||||||
|
mockito:
|
||||||
|
dependency: "direct dev"
|
||||||
|
description:
|
||||||
|
name: mockito
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "4.1.1"
|
||||||
|
multi_server_socket:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: multi_server_socket
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "1.0.2"
|
||||||
|
node_preamble:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: node_preamble
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "1.4.8"
|
||||||
|
openapi:
|
||||||
|
dependency: "direct main"
|
||||||
|
description:
|
||||||
|
path: "../petstore_client_lib"
|
||||||
|
relative: true
|
||||||
|
source: path
|
||||||
|
version: "1.0.0"
|
||||||
|
package_config:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: package_config
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "1.1.0"
|
||||||
|
package_resolver:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: package_resolver
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "1.0.10"
|
||||||
|
path:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: path
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "1.6.4"
|
||||||
|
pedantic:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: pedantic
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "1.8.0+1"
|
||||||
|
pool:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: pool
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "1.4.0"
|
||||||
|
pub_semver:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: pub_semver
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "1.4.2"
|
||||||
|
shelf:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: shelf
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "0.7.5"
|
||||||
|
shelf_packages_handler:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: shelf_packages_handler
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "1.0.4"
|
||||||
|
shelf_static:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: shelf_static
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "0.2.8"
|
||||||
|
shelf_web_socket:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: shelf_web_socket
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "0.2.3"
|
||||||
|
source_map_stack_trace:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: source_map_stack_trace
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "1.1.5"
|
||||||
|
source_maps:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: source_maps
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "0.10.8"
|
||||||
|
source_span:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: source_span
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "1.5.5"
|
||||||
|
stack_trace:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: stack_trace
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "1.9.3"
|
||||||
|
stream_channel:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: stream_channel
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "2.0.0"
|
||||||
|
string_scanner:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: string_scanner
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "1.0.5"
|
||||||
|
term_glyph:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: term_glyph
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "1.1.0"
|
||||||
|
test:
|
||||||
|
dependency: "direct dev"
|
||||||
|
description:
|
||||||
|
name: test
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "1.8.0"
|
||||||
|
test_api:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: test_api
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "0.2.8"
|
||||||
|
test_core:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: test_core
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "0.2.10"
|
||||||
|
typed_data:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: typed_data
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "1.1.6"
|
||||||
|
vm_service:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: vm_service
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "2.1.0"
|
||||||
|
watcher:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: watcher
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "0.9.7+12"
|
||||||
|
web_socket_channel:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: web_socket_channel
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "1.0.15"
|
||||||
|
yaml:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: yaml
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "2.2.0"
|
||||||
|
sdks:
|
||||||
|
dart: ">=2.5.0 <3.0.0"
|
@ -2,9 +2,12 @@ name: petstore_client
|
|||||||
version: 1.0.0
|
version: 1.0.0
|
||||||
description: Petstore client using OpenAPI library
|
description: Petstore client using OpenAPI library
|
||||||
environment:
|
environment:
|
||||||
sdk: '>=2.0.0 <3.0.0'
|
sdk: '>=2.5.0 <3.0.0'
|
||||||
dependencies:
|
dependencies:
|
||||||
openapi:
|
openapi:
|
||||||
path: ../openapi
|
path: ../petstore_client_lib
|
||||||
dev_dependencies:
|
dev_dependencies:
|
||||||
test: ^1.6.8
|
test: ^1.8.0
|
||||||
|
mockito: ^4.1.1
|
||||||
|
http: ^0.12.0
|
||||||
|
collection: ^1.14.12
|
||||||
|
133
samples/client/petstore/dart2/petstore/test/fake_client.dart
Normal file
133
samples/client/petstore/dart2/petstore/test/fake_client.dart
Normal file
@ -0,0 +1,133 @@
|
|||||||
|
import 'dart:convert';
|
||||||
|
|
||||||
|
import 'package:collection/collection.dart';
|
||||||
|
import 'package:http/http.dart';
|
||||||
|
import 'package:mockito/mockito.dart';
|
||||||
|
|
||||||
|
/// A fake client that checks for expected values and returns given responses
|
||||||
|
///
|
||||||
|
/// Checks for the expected values (url, headers, body) and throws if not found
|
||||||
|
///
|
||||||
|
/// If exception is non-null the request will throw the exception, after other
|
||||||
|
/// checks are performed
|
||||||
|
class FakeClient extends Fake implements Client {
|
||||||
|
FakeClient({
|
||||||
|
this.throwException,
|
||||||
|
this.expectedPostRequestBody,
|
||||||
|
this.postResponseBody,
|
||||||
|
this.expectedGetRequestBody,
|
||||||
|
this.getResponseBody,
|
||||||
|
this.deleteResponseBody,
|
||||||
|
this.expectedPutRequestBody,
|
||||||
|
this.putResponseBody,
|
||||||
|
this.sendResponseBody,
|
||||||
|
this.expectedUrl,
|
||||||
|
this.expectedHeaders = const {'Content-Type': 'application/json'},
|
||||||
|
});
|
||||||
|
|
||||||
|
Exception throwException;
|
||||||
|
Object expectedPostRequestBody;
|
||||||
|
String postResponseBody;
|
||||||
|
String expectedGetRequestBody;
|
||||||
|
String getResponseBody;
|
||||||
|
String deleteResponseBody;
|
||||||
|
String expectedPutRequestBody;
|
||||||
|
String putResponseBody;
|
||||||
|
String sendResponseBody;
|
||||||
|
String expectedUrl;
|
||||||
|
Map<String, String> expectedHeaders;
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<Response> post(url,
|
||||||
|
{Map<String, String> headers, body, Encoding encoding}) async {
|
||||||
|
// check that the request was made with expected values
|
||||||
|
if (url != expectedUrl) {
|
||||||
|
throw StateError(
|
||||||
|
'POST was called with unexpected url: ${url} should be ${expectedUrl}');
|
||||||
|
}
|
||||||
|
if (!MapEquality().equals(headers, expectedHeaders)) {
|
||||||
|
throw StateError(
|
||||||
|
'POST was called with unexpected headers: ${headers} should be ${expectedHeaders}');
|
||||||
|
}
|
||||||
|
// currently we only expect Map (and subtypes) or Strings
|
||||||
|
if (body is Map) {
|
||||||
|
if (!MapEquality().equals(body, expectedPostRequestBody)) {
|
||||||
|
throw StateError(
|
||||||
|
'POST was called with unexpected body: ${body} should be ${expectedPostRequestBody}');
|
||||||
|
}
|
||||||
|
} else if (body != expectedPostRequestBody) {
|
||||||
|
throw StateError(
|
||||||
|
'POST was called with unexpected body: ${body} should be ${expectedPostRequestBody}');
|
||||||
|
}
|
||||||
|
|
||||||
|
// throw if set to throw
|
||||||
|
if (throwException != null) throw throwException;
|
||||||
|
|
||||||
|
return Response(postResponseBody, 200);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<Response> get(url, {Map<String, String> headers}) async {
|
||||||
|
// check that the request was made with expected values
|
||||||
|
if (url != expectedUrl) {
|
||||||
|
throw StateError(
|
||||||
|
'GET was called with unexpected url: ${url} should be ${expectedUrl}');
|
||||||
|
}
|
||||||
|
if (!MapEquality().equals(headers, expectedHeaders)) {
|
||||||
|
throw StateError(
|
||||||
|
'GET was called with unexpected headers: ${headers} should be ${expectedHeaders}');
|
||||||
|
}
|
||||||
|
|
||||||
|
// throw if set to throw
|
||||||
|
if (throwException != null) throw throwException;
|
||||||
|
|
||||||
|
return Response(getResponseBody, 200);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<Response> delete(url, {Map<String, String> headers}) async {
|
||||||
|
// check that the request was made with expected values
|
||||||
|
if (url != expectedUrl) {
|
||||||
|
throw StateError(
|
||||||
|
'DELETE was called with unexpected url: ${url} should be ${expectedUrl}');
|
||||||
|
}
|
||||||
|
if (!MapEquality().equals(headers, expectedHeaders)) {
|
||||||
|
throw StateError(
|
||||||
|
'DELETE was called with unexpected headers: ${headers} should be ${expectedHeaders}');
|
||||||
|
}
|
||||||
|
|
||||||
|
// throw if set to throw
|
||||||
|
if (throwException != null) throw throwException;
|
||||||
|
|
||||||
|
return Response(deleteResponseBody, 200);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<Response> put(url,
|
||||||
|
{Map<String, String> headers, body, Encoding encoding}) async {
|
||||||
|
// check that the request was made with expected values
|
||||||
|
if (url != expectedUrl) {
|
||||||
|
throw StateError(
|
||||||
|
'PUT was called with unexpected url: ${url} should be ${expectedUrl}');
|
||||||
|
}
|
||||||
|
if (!MapEquality().equals(headers, expectedHeaders)) {
|
||||||
|
throw StateError(
|
||||||
|
'PUT was called with unexpected headers: ${headers} should be ${expectedHeaders}');
|
||||||
|
}
|
||||||
|
if (body != expectedPutRequestBody) {
|
||||||
|
throw StateError(
|
||||||
|
'PUT was called with unexpected body: ${body} should be ${expectedPutRequestBody}');
|
||||||
|
}
|
||||||
|
|
||||||
|
// throw if set to throw
|
||||||
|
if (throwException != null) throw throwException;
|
||||||
|
|
||||||
|
return Response(putResponseBody, 200);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<StreamedResponse> send(BaseRequest request) async {
|
||||||
|
List<int> bytes = utf8.encode(sendResponseBody);
|
||||||
|
return StreamedResponse(Stream.fromIterable([bytes]), 200);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1 @@
|
|||||||
|
{"code":200,"type":"unknown","message":"additionalMetadata: \nFile uploaded to ./null, 4 bytes"}
|
@ -0,0 +1 @@
|
|||||||
|
{"mine":1,"sold":18,"string":568,"Dead":2,"test":2,"Nonavailable":1,"custom":3,"pending":20,"available":2212,"notAvailable":26,"avaiflable":1,"AVAILABLE":1,"swimming":1,"availablee":2,"success":1,"105":1,"missing":11,"disabled":1,"Available":1,"]]>":1}
|
@ -0,0 +1,231 @@
|
|||||||
|
import 'dart:io';
|
||||||
|
|
||||||
|
import 'package:http/http.dart';
|
||||||
|
import 'package:openapi/api.dart';
|
||||||
|
import 'package:test/test.dart';
|
||||||
|
|
||||||
|
import 'fake_client.dart';
|
||||||
|
import 'random_id.dart';
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
final petApi = PetApi();
|
||||||
|
|
||||||
|
Pet makePet({
|
||||||
|
int id = 1234,
|
||||||
|
String name = 'Fluffy',
|
||||||
|
String status = '',
|
||||||
|
}) {
|
||||||
|
final category = Category()
|
||||||
|
..id = 1234
|
||||||
|
..name = 'eyeColor';
|
||||||
|
final tags = [
|
||||||
|
Tag()
|
||||||
|
..id = 1234
|
||||||
|
..name = 'New York',
|
||||||
|
Tag()
|
||||||
|
..id = 124321
|
||||||
|
..name = 'Jose'
|
||||||
|
];
|
||||||
|
return Pet()
|
||||||
|
..id = id
|
||||||
|
..category = category
|
||||||
|
..tags = tags
|
||||||
|
..name = name
|
||||||
|
..status = status
|
||||||
|
..photoUrls = ['https://petstore.com/sample/photo1.jpg'];
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Setup the fake client then call [petApi.addPet]
|
||||||
|
Future<dynamic> addPet(Pet pet) {
|
||||||
|
petApi.apiClient.client = FakeClient(
|
||||||
|
expectedUrl: 'http://petstore.swagger.io/v2/pet',
|
||||||
|
expectedPostRequestBody: petApi.apiClient.serialize(pet),
|
||||||
|
postResponseBody: '',
|
||||||
|
);
|
||||||
|
return petApi.addPet(pet);
|
||||||
|
}
|
||||||
|
|
||||||
|
group('Pet API with faked client', () {
|
||||||
|
test('adds a new pet and gets it by id', () async {
|
||||||
|
final id = newId();
|
||||||
|
final newPet = makePet(id: id);
|
||||||
|
|
||||||
|
// use the pet api to add a pet
|
||||||
|
petApi.apiClient.client = FakeClient(
|
||||||
|
expectedUrl: 'http://petstore.swagger.io/v2/pet',
|
||||||
|
expectedPostRequestBody: petApi.apiClient.serialize(newPet),
|
||||||
|
postResponseBody: '',
|
||||||
|
);
|
||||||
|
await petApi.addPet(newPet);
|
||||||
|
|
||||||
|
// retrieve the same pet by id
|
||||||
|
petApi.apiClient.client = FakeClient(
|
||||||
|
expectedUrl: 'http://petstore.swagger.io/v2/pet/$id',
|
||||||
|
getResponseBody: petApi.apiClient.serialize(newPet),
|
||||||
|
);
|
||||||
|
final retrievedPet = await petApi.getPetById(id);
|
||||||
|
|
||||||
|
// check that the retrieved id is as expected
|
||||||
|
expect(retrievedPet.id, equals(id));
|
||||||
|
});
|
||||||
|
|
||||||
|
test('doesn\'t get non-existing pet by id', () {
|
||||||
|
final id = newId();
|
||||||
|
petApi.apiClient.client = FakeClient(
|
||||||
|
expectedUrl: 'http://petstore.swagger.io/v2/pet/$id',
|
||||||
|
throwException: ApiException(400, 'not found'),
|
||||||
|
);
|
||||||
|
expect(
|
||||||
|
petApi.getPetById(id), throwsA(equals(TypeMatcher<ApiException>())));
|
||||||
|
});
|
||||||
|
|
||||||
|
test('deletes existing pet by id', () async {
|
||||||
|
final id = newId();
|
||||||
|
Pet newPet = makePet(id: id);
|
||||||
|
|
||||||
|
// add a new pet
|
||||||
|
petApi.apiClient.client = FakeClient(
|
||||||
|
expectedUrl: 'http://petstore.swagger.io/v2/pet',
|
||||||
|
expectedPostRequestBody: petApi.apiClient.serialize(newPet),
|
||||||
|
postResponseBody: '',
|
||||||
|
);
|
||||||
|
await petApi.addPet(newPet);
|
||||||
|
|
||||||
|
// delete the pet
|
||||||
|
petApi.apiClient.client = FakeClient(
|
||||||
|
expectedUrl: 'http://petstore.swagger.io/v2/pet/$id',
|
||||||
|
expectedHeaders: {
|
||||||
|
'Content-Type': 'application/json',
|
||||||
|
'api_key': 'special-key'
|
||||||
|
},
|
||||||
|
deleteResponseBody: '',
|
||||||
|
);
|
||||||
|
await petApi.deletePet(id, apiKey: 'special-key');
|
||||||
|
|
||||||
|
// check for the deleted pet
|
||||||
|
petApi.apiClient.client = FakeClient(
|
||||||
|
expectedUrl: 'http://petstore.swagger.io/v2/pet/$id',
|
||||||
|
throwException: ApiException(400, 'Not found'),
|
||||||
|
);
|
||||||
|
expect(
|
||||||
|
petApi.getPetById(id), throwsA(equals(TypeMatcher<ApiException>())));
|
||||||
|
});
|
||||||
|
|
||||||
|
test('updates pet with form', () async {
|
||||||
|
final id = newId();
|
||||||
|
final newPet = makePet(id: id, name: 'Snowy');
|
||||||
|
|
||||||
|
// add a new pet
|
||||||
|
petApi.apiClient.client = FakeClient(
|
||||||
|
expectedUrl: 'http://petstore.swagger.io/v2/pet',
|
||||||
|
expectedPostRequestBody: petApi.apiClient.serialize(newPet),
|
||||||
|
postResponseBody: '',
|
||||||
|
);
|
||||||
|
await petApi.addPet(newPet);
|
||||||
|
|
||||||
|
final multipartRequest = MultipartRequest(null, null);
|
||||||
|
multipartRequest.fields['name'] = 'Doge';
|
||||||
|
multipartRequest.fields['status'] = '';
|
||||||
|
|
||||||
|
// update with form
|
||||||
|
petApi.apiClient.client = FakeClient(
|
||||||
|
expectedUrl: 'http://petstore.swagger.io/v2/pet/$id',
|
||||||
|
expectedHeaders: {
|
||||||
|
'Content-Type': 'application/x-www-form-urlencoded',
|
||||||
|
},
|
||||||
|
expectedPostRequestBody: {'name': 'Doge', 'status': ''},
|
||||||
|
postResponseBody: '',
|
||||||
|
);
|
||||||
|
await petApi.updatePetWithForm(id, name: 'Doge', status: '');
|
||||||
|
|
||||||
|
// check update worked
|
||||||
|
newPet.name = 'Doge';
|
||||||
|
petApi.apiClient.client = FakeClient(
|
||||||
|
expectedUrl: 'http://petstore.swagger.io/v2/pet/$id',
|
||||||
|
getResponseBody: petApi.apiClient.serialize(newPet),
|
||||||
|
);
|
||||||
|
final pet = await petApi.getPetById(id);
|
||||||
|
expect(pet.name, equals('Doge'));
|
||||||
|
});
|
||||||
|
|
||||||
|
test('updates existing pet', () async {
|
||||||
|
final id = newId();
|
||||||
|
final name = 'Snowy';
|
||||||
|
final newPet = makePet(id: id);
|
||||||
|
final updatePet = makePet(id: id, name: name);
|
||||||
|
|
||||||
|
// add a new pet
|
||||||
|
petApi.apiClient.client = FakeClient(
|
||||||
|
expectedUrl: 'http://petstore.swagger.io/v2/pet',
|
||||||
|
expectedPostRequestBody: petApi.apiClient.serialize(newPet),
|
||||||
|
postResponseBody: '',
|
||||||
|
);
|
||||||
|
await petApi.addPet(newPet);
|
||||||
|
|
||||||
|
// update the same pet
|
||||||
|
petApi.apiClient.client = FakeClient(
|
||||||
|
expectedUrl: 'http://petstore.swagger.io/v2/pet',
|
||||||
|
expectedPutRequestBody: petApi.apiClient.serialize(updatePet),
|
||||||
|
putResponseBody: '',
|
||||||
|
);
|
||||||
|
await petApi.updatePet(updatePet);
|
||||||
|
|
||||||
|
// check update worked
|
||||||
|
petApi.apiClient.client = FakeClient(
|
||||||
|
expectedUrl: 'http://petstore.swagger.io/v2/pet/$id',
|
||||||
|
getResponseBody: petApi.apiClient.serialize(updatePet),
|
||||||
|
);
|
||||||
|
final pet = await petApi.getPetById(id);
|
||||||
|
expect(pet.name, equals(name));
|
||||||
|
});
|
||||||
|
|
||||||
|
test('finds pets by status', () async {
|
||||||
|
final id1 = newId();
|
||||||
|
final id2 = newId();
|
||||||
|
final id3 = newId();
|
||||||
|
final status = 'available';
|
||||||
|
final pet1 = makePet(id: id1, status: status);
|
||||||
|
final pet2 = makePet(id: id2, status: status);
|
||||||
|
final pet3 = makePet(id: id3, status: 'sold');
|
||||||
|
|
||||||
|
return Future.wait([addPet(pet1), addPet(pet2), addPet(pet3)])
|
||||||
|
.then((_) async {
|
||||||
|
// retrieve pets by status
|
||||||
|
petApi.apiClient.client = FakeClient(
|
||||||
|
expectedUrl:
|
||||||
|
'http://petstore.swagger.io/v2/pet/findByStatus?status=$status',
|
||||||
|
getResponseBody: petApi.apiClient.serialize([pet1, pet2]),
|
||||||
|
);
|
||||||
|
final pets = await petApi.findPetsByStatus([status]);
|
||||||
|
final petIds = pets.map((pet) => pet.id).toList();
|
||||||
|
expect(petIds, contains(id1));
|
||||||
|
expect(petIds, contains(id2));
|
||||||
|
expect(petIds, isNot(contains(id3)));
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
test('uploads a pet image', () async {
|
||||||
|
final id = newId();
|
||||||
|
final newPet = makePet(id: id);
|
||||||
|
// get some test data (recorded from live response)
|
||||||
|
final uploadResponse =
|
||||||
|
await File('test/file_upload_response.json').readAsString();
|
||||||
|
|
||||||
|
// add a new pet
|
||||||
|
petApi.apiClient.client = FakeClient(
|
||||||
|
expectedUrl: 'http://petstore.swagger.io/v2/pet',
|
||||||
|
expectedPostRequestBody: petApi.apiClient.serialize(newPet),
|
||||||
|
postResponseBody: '',
|
||||||
|
);
|
||||||
|
await petApi.addPet(newPet);
|
||||||
|
|
||||||
|
petApi.apiClient.client = FakeClient(
|
||||||
|
expectedUrl: 'http://petstore.swagger.io/v2/pet',
|
||||||
|
sendResponseBody: uploadResponse,
|
||||||
|
);
|
||||||
|
final file =
|
||||||
|
new MultipartFile.fromBytes('file', [104, 101, 108, 108, 111]);
|
||||||
|
await petApi.uploadFile(id, additionalMetadata: '', file: file);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
@ -7,7 +7,7 @@ import 'package:test/test.dart';
|
|||||||
import 'random_id.dart';
|
import 'random_id.dart';
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
var petApi = new PetApi();
|
var petApi = PetApi();
|
||||||
|
|
||||||
Pet makePet({
|
Pet makePet({
|
||||||
int id = 1234,
|
int id = 1234,
|
||||||
@ -34,7 +34,7 @@ void main() {
|
|||||||
..photoUrls = ['https://petstore.com/sample/photo1.jpg'];
|
..photoUrls = ['https://petstore.com/sample/photo1.jpg'];
|
||||||
}
|
}
|
||||||
|
|
||||||
group('Pet API ', () {
|
group('Pet API with live client', () {
|
||||||
test('adds a new pet and gets it by id', () async {
|
test('adds a new pet and gets it by id', () async {
|
||||||
var id = newId();
|
var id = newId();
|
||||||
await petApi.addPet(makePet(id: id));
|
await petApi.addPet(makePet(id: id));
|
||||||
@ -99,5 +99,5 @@ void main() {
|
|||||||
var file = new MultipartFile.fromBytes('file', [104, 101, 108, 108, 111]);
|
var file = new MultipartFile.fromBytes('file', [104, 101, 108, 108, 111]);
|
||||||
await petApi.uploadFile(id, additionalMetadata: '', file: file);
|
await petApi.uploadFile(id, additionalMetadata: '', file: file);
|
||||||
});
|
});
|
||||||
});
|
}, skip: 'e2e tests for CI');
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,85 @@
|
|||||||
|
import 'dart:io';
|
||||||
|
|
||||||
|
import 'package:openapi/api.dart';
|
||||||
|
import 'package:test/test.dart';
|
||||||
|
|
||||||
|
import 'fake_client.dart';
|
||||||
|
import 'random_id.dart';
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
var storeApi = new StoreApi();
|
||||||
|
|
||||||
|
Order makeOrder({int id}) {
|
||||||
|
return Order()
|
||||||
|
..id = id
|
||||||
|
..petId = 1234
|
||||||
|
..quantity = 1
|
||||||
|
..shipDate = DateTime.now()
|
||||||
|
..status
|
||||||
|
..complete = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
group('Store API with faked client', () {
|
||||||
|
test('places an order and gets it by id', () async {
|
||||||
|
final id = newId();
|
||||||
|
final newOrder = makeOrder(id: id);
|
||||||
|
|
||||||
|
// use the store api to add an order
|
||||||
|
storeApi.apiClient.client = FakeClient(
|
||||||
|
expectedUrl: 'http://petstore.swagger.io/v2/store/order',
|
||||||
|
expectedPostRequestBody: storeApi.apiClient.serialize(newOrder),
|
||||||
|
postResponseBody: storeApi.apiClient.serialize(newOrder),
|
||||||
|
);
|
||||||
|
await storeApi.placeOrder(newOrder);
|
||||||
|
|
||||||
|
// retrieve the same order by id
|
||||||
|
storeApi.apiClient.client = FakeClient(
|
||||||
|
expectedUrl: 'http://petstore.swagger.io/v2/store/order/$id',
|
||||||
|
getResponseBody: storeApi.apiClient.serialize(newOrder),
|
||||||
|
);
|
||||||
|
final placedOrder = await storeApi.getOrderById(id);
|
||||||
|
expect(placedOrder.id, equals(id));
|
||||||
|
});
|
||||||
|
|
||||||
|
test('deletes an order', () async {
|
||||||
|
final id = newId();
|
||||||
|
final newOrder = makeOrder(id: id);
|
||||||
|
|
||||||
|
// use the store api to add an order
|
||||||
|
storeApi.apiClient.client = FakeClient(
|
||||||
|
expectedUrl: 'http://petstore.swagger.io/v2/store/order',
|
||||||
|
expectedPostRequestBody: storeApi.apiClient.serialize(newOrder),
|
||||||
|
postResponseBody: storeApi.apiClient.serialize(newOrder),
|
||||||
|
);
|
||||||
|
await storeApi.placeOrder(newOrder);
|
||||||
|
|
||||||
|
// delete the same order
|
||||||
|
storeApi.apiClient.client = FakeClient(
|
||||||
|
expectedUrl: 'http://petstore.swagger.io/v2/store/order/$id',
|
||||||
|
deleteResponseBody: '',
|
||||||
|
);
|
||||||
|
await storeApi.deleteOrder(id.toString());
|
||||||
|
|
||||||
|
// try and retrieve the order
|
||||||
|
storeApi.apiClient.client = FakeClient(
|
||||||
|
expectedUrl: 'http://petstore.swagger.io/v2/store/order/$id',
|
||||||
|
throwException: ApiException(400, 'Not found'),
|
||||||
|
);
|
||||||
|
expect(storeApi.getOrderById(id),
|
||||||
|
throwsA(equals(TypeMatcher<ApiException>())));
|
||||||
|
});
|
||||||
|
|
||||||
|
test('gets the store inventory', () async {
|
||||||
|
// get some test data (recorded from live response)
|
||||||
|
final inventoryResponse =
|
||||||
|
await File('test/inventory_response.json').readAsString();
|
||||||
|
// use the store api to get the inventory
|
||||||
|
storeApi.apiClient.client = FakeClient(
|
||||||
|
expectedUrl: 'http://petstore.swagger.io/v2/store/inventory',
|
||||||
|
getResponseBody: inventoryResponse,
|
||||||
|
);
|
||||||
|
Map<String, int> inventory = await storeApi.getInventory();
|
||||||
|
expect(inventory.length, isNot(equals(0)));
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
@ -16,7 +16,7 @@ void main() {
|
|||||||
..complete = false;
|
..complete = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
group('Store API ', () {
|
group('Store API with live client', () {
|
||||||
test('places an order and gets it by id', () async {
|
test('places an order and gets it by id', () async {
|
||||||
var id = newId();
|
var id = newId();
|
||||||
|
|
||||||
@ -38,5 +38,5 @@ void main() {
|
|||||||
Map<String, int> inventory = await storeApi.getInventory();
|
Map<String, int> inventory = await storeApi.getInventory();
|
||||||
expect(inventory.length, isNot(equals(0)));
|
expect(inventory.length, isNot(equals(0)));
|
||||||
});
|
});
|
||||||
});
|
}); // , skip: 'e2e tests for CI'
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,170 @@
|
|||||||
|
import 'package:openapi/api.dart';
|
||||||
|
import 'package:test/test.dart';
|
||||||
|
|
||||||
|
import 'fake_client.dart';
|
||||||
|
import 'random_id.dart';
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
var userApi = new UserApi();
|
||||||
|
|
||||||
|
User makeUser(
|
||||||
|
{int id, String userName = 'username', String password = 'password'}) {
|
||||||
|
return User()
|
||||||
|
..id = id
|
||||||
|
..username = userName
|
||||||
|
..firstName = 'firstname'
|
||||||
|
..lastName = 'lastname'
|
||||||
|
..email = 'email'
|
||||||
|
..password = password
|
||||||
|
..phone = 'phone'
|
||||||
|
..userStatus = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
group('User API with faked client', () {
|
||||||
|
test('creates a user', () async {
|
||||||
|
final id = newId();
|
||||||
|
final username = 'Mally45';
|
||||||
|
final newUser = makeUser(id: id, userName: username);
|
||||||
|
|
||||||
|
// use the user api to create a user
|
||||||
|
userApi.apiClient.client = FakeClient(
|
||||||
|
expectedUrl: 'http://petstore.swagger.io/v2/user',
|
||||||
|
expectedPostRequestBody: userApi.apiClient.serialize(newUser),
|
||||||
|
postResponseBody: userApi.apiClient.serialize(newUser),
|
||||||
|
);
|
||||||
|
await userApi.createUser(newUser);
|
||||||
|
|
||||||
|
// retrieve the same user
|
||||||
|
userApi.apiClient.client = FakeClient(
|
||||||
|
expectedUrl: 'http://petstore.swagger.io/v2/user/$username',
|
||||||
|
getResponseBody: userApi.apiClient.serialize(newUser),
|
||||||
|
);
|
||||||
|
var user = await userApi.getUserByName(username);
|
||||||
|
expect(user.id, equals(id));
|
||||||
|
});
|
||||||
|
|
||||||
|
test('creates users with list input', () async {
|
||||||
|
final firstId = newId();
|
||||||
|
final joe = 'Joe';
|
||||||
|
|
||||||
|
final sally = 'Sally';
|
||||||
|
final secondId = newId();
|
||||||
|
|
||||||
|
final users = [
|
||||||
|
makeUser(id: firstId, userName: joe),
|
||||||
|
makeUser(id: secondId, userName: sally),
|
||||||
|
];
|
||||||
|
|
||||||
|
// use the user api to create a list of users
|
||||||
|
userApi.apiClient.client = FakeClient(
|
||||||
|
expectedUrl: 'http://petstore.swagger.io/v2/user/createWithList',
|
||||||
|
expectedPostRequestBody: userApi.apiClient.serialize(users),
|
||||||
|
postResponseBody: userApi.apiClient.serialize(users),
|
||||||
|
);
|
||||||
|
await userApi.createUsersWithListInput(users);
|
||||||
|
|
||||||
|
// retrieve the users
|
||||||
|
userApi.apiClient.client = FakeClient(
|
||||||
|
expectedUrl:
|
||||||
|
'http://petstore.swagger.io/v2/user/${users.elementAt(0).username}',
|
||||||
|
getResponseBody: userApi.apiClient.serialize(
|
||||||
|
users.elementAt(0),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
final firstUser = await userApi.getUserByName(joe);
|
||||||
|
userApi.apiClient.client = FakeClient(
|
||||||
|
expectedUrl:
|
||||||
|
'http://petstore.swagger.io/v2/user/${users.elementAt(1).username}',
|
||||||
|
getResponseBody: userApi.apiClient.serialize(
|
||||||
|
users.elementAt(1),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
final secondUser = await userApi.getUserByName(sally);
|
||||||
|
expect(firstUser.id, equals(firstId));
|
||||||
|
expect(secondUser.id, equals(secondId));
|
||||||
|
});
|
||||||
|
|
||||||
|
test('updates a user', () async {
|
||||||
|
final username = 'Arkjam89';
|
||||||
|
final email = 'test@example.com';
|
||||||
|
final newUser = makeUser(id: newId(), userName: username);
|
||||||
|
|
||||||
|
// use the user api to create a user
|
||||||
|
userApi.apiClient.client = FakeClient(
|
||||||
|
expectedUrl: 'http://petstore.swagger.io/v2/user',
|
||||||
|
expectedPostRequestBody: userApi.apiClient.serialize(newUser),
|
||||||
|
postResponseBody: userApi.apiClient.serialize(newUser),
|
||||||
|
);
|
||||||
|
await userApi.createUser(newUser);
|
||||||
|
newUser.email = email;
|
||||||
|
|
||||||
|
// use the user api to update the user
|
||||||
|
userApi.apiClient.client = FakeClient(
|
||||||
|
expectedUrl: 'http://petstore.swagger.io/v2/user/${newUser.username}',
|
||||||
|
expectedPutRequestBody: userApi.apiClient.serialize(newUser),
|
||||||
|
putResponseBody: userApi.apiClient.serialize(newUser),
|
||||||
|
);
|
||||||
|
await userApi.updateUser(username, newUser);
|
||||||
|
|
||||||
|
// retrieve the same user
|
||||||
|
userApi.apiClient.client = FakeClient(
|
||||||
|
expectedUrl: 'http://petstore.swagger.io/v2/user/${newUser.username}',
|
||||||
|
getResponseBody: userApi.apiClient.serialize(newUser),
|
||||||
|
);
|
||||||
|
var foundUser = await userApi.getUserByName(username);
|
||||||
|
expect(foundUser.email, equals(email));
|
||||||
|
});
|
||||||
|
|
||||||
|
test('deletes a user', () async {
|
||||||
|
final username = 'Riddlem325';
|
||||||
|
final newUser = makeUser(id: newId(), userName: username);
|
||||||
|
|
||||||
|
// use the user api to create a user
|
||||||
|
userApi.apiClient.client = FakeClient(
|
||||||
|
expectedUrl: 'http://petstore.swagger.io/v2/user',
|
||||||
|
expectedPostRequestBody: userApi.apiClient.serialize(newUser),
|
||||||
|
postResponseBody: userApi.apiClient.serialize(newUser),
|
||||||
|
);
|
||||||
|
await userApi.createUser(newUser);
|
||||||
|
|
||||||
|
// delete the same user
|
||||||
|
userApi.apiClient.client = FakeClient(
|
||||||
|
expectedUrl: 'http://petstore.swagger.io/v2/user/${newUser.username}',
|
||||||
|
deleteResponseBody: '',
|
||||||
|
);
|
||||||
|
await userApi.deleteUser(username);
|
||||||
|
|
||||||
|
// try and retrieve the user
|
||||||
|
userApi.apiClient.client = FakeClient(
|
||||||
|
expectedUrl: 'http://petstore.swagger.io/v2/user/${newUser.username}',
|
||||||
|
throwException: ApiException(400, 'Not found'),
|
||||||
|
);
|
||||||
|
expect(userApi.getUserByName(username),
|
||||||
|
throwsA(TypeMatcher<ApiException>()));
|
||||||
|
});
|
||||||
|
|
||||||
|
test('logs a user in', () async {
|
||||||
|
final username = 'sgarad625';
|
||||||
|
final password = 'lokimoki1';
|
||||||
|
final newUser =
|
||||||
|
makeUser(id: newId(), userName: username, password: password);
|
||||||
|
|
||||||
|
// use the user api to create a user
|
||||||
|
userApi.apiClient.client = FakeClient(
|
||||||
|
expectedUrl: 'http://petstore.swagger.io/v2/user',
|
||||||
|
expectedPostRequestBody: userApi.apiClient.serialize(newUser),
|
||||||
|
postResponseBody: userApi.apiClient.serialize(newUser),
|
||||||
|
);
|
||||||
|
await userApi.createUser(newUser);
|
||||||
|
|
||||||
|
// use the user api to login
|
||||||
|
userApi.apiClient.client = FakeClient(
|
||||||
|
expectedUrl:
|
||||||
|
'http://petstore.swagger.io/v2/user/login?username=${newUser.username}&password=${newUser.password}',
|
||||||
|
getResponseBody: 'logged in user session:',
|
||||||
|
);
|
||||||
|
final result = await userApi.loginUser(username, password);
|
||||||
|
expect(result, contains('logged in user session:'));
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
@ -19,7 +19,7 @@ void main() {
|
|||||||
..userStatus = 0;
|
..userStatus = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
group('User API ', () {
|
group('User API with live client', () {
|
||||||
test('creates a user', () async {
|
test('creates a user', () async {
|
||||||
var id = newId();
|
var id = newId();
|
||||||
var username = 'Mally45';
|
var username = 'Mally45';
|
||||||
@ -76,5 +76,5 @@ void main() {
|
|||||||
var result = await userApi.loginUser(username, password);
|
var result = await userApi.loginUser(username, password);
|
||||||
expect(result, contains('logged in user session:'));
|
expect(result, contains('logged in user session:'));
|
||||||
});
|
});
|
||||||
});
|
}, skip: 'e2e tests for CI');
|
||||||
}
|
}
|
||||||
|
@ -1,4 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
echo "purge test fils under 'test' folder"
|
|
||||||
rm -Rf openapi/test/
|
|
Loading…
x
Reference in New Issue
Block a user