Merge pull request 'sprint-1' (#1) from sprint-1 into main
Reviewed-on: #1
This commit is contained in:
commit
c5531ae366
42
README.md
42
README.md
@ -1,39 +1,3 @@
|
|||||||
<!--
|
// Тесты в server_test.dart
|
||||||
This README describes the package. If you publish this package to pub.dev,
|
// Запускать встроенными экшенами
|
||||||
this README's contents appear on the landing page for your package.
|
// в apis Лежат все апи структурированно
|
||||||
|
|
||||||
For information about how to write a good package README, see the guide for
|
|
||||||
[writing package pages](https://dart.dev/tools/pub/writing-package-pages).
|
|
||||||
|
|
||||||
For general information about developing packages, see the Dart guide for
|
|
||||||
[creating packages](https://dart.dev/guides/libraries/create-packages)
|
|
||||||
and the Flutter guide for
|
|
||||||
[developing packages and plugins](https://flutter.dev/to/develop-packages).
|
|
||||||
-->
|
|
||||||
|
|
||||||
TODO: Put a short description of the package here that helps potential users
|
|
||||||
know whether this package might be useful for them.
|
|
||||||
|
|
||||||
## Features
|
|
||||||
|
|
||||||
TODO: List what your package can do. Maybe include images, gifs, or videos.
|
|
||||||
|
|
||||||
## Getting started
|
|
||||||
|
|
||||||
TODO: List prerequisites and provide or point to information on how to
|
|
||||||
start using the package.
|
|
||||||
|
|
||||||
## Usage
|
|
||||||
|
|
||||||
TODO: Include short and useful examples for package users. Add longer examples
|
|
||||||
to `/example` folder.
|
|
||||||
|
|
||||||
```dart
|
|
||||||
const like = 'sample';
|
|
||||||
```
|
|
||||||
|
|
||||||
## Additional information
|
|
||||||
|
|
||||||
TODO: Tell users more about the package: where to find more information, how to
|
|
||||||
contribute to the package, how to file issues, what response they can expect
|
|
||||||
from the package authors, and more.
|
|
@ -4,12 +4,14 @@ import 'package:server/server.dart';
|
|||||||
|
|
||||||
class Auth {
|
class Auth {
|
||||||
String lastError = '';
|
String lastError = '';
|
||||||
|
|
||||||
login(String email, String password) async {
|
login(String email, String password) async {
|
||||||
try {
|
try {
|
||||||
final response = api.post(
|
final response = await api.post(
|
||||||
'/collections/users/auth-with-password',
|
'/collections/users/auth-with-password',
|
||||||
data: {identity: email, password: password},
|
data: {identityKey: email, passwordKey: password},
|
||||||
);
|
);
|
||||||
|
return response.data;
|
||||||
} on DioException catch (e) {
|
} on DioException catch (e) {
|
||||||
if (e.type == DioExceptionType.connectionError) {
|
if (e.type == DioExceptionType.connectionError) {
|
||||||
lastError = 'Internet Connection Error';
|
lastError = 'Internet Connection Error';
|
||||||
@ -19,12 +21,87 @@ class Auth {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
register(String email, String password) async {
|
updateUser(
|
||||||
|
String userId,
|
||||||
|
String firstName,
|
||||||
|
String lastname,
|
||||||
|
String secondName,
|
||||||
|
String datebirthday,
|
||||||
|
String gender,
|
||||||
|
) async {
|
||||||
try {
|
try {
|
||||||
final response = api.post(
|
final response = await api.patch(
|
||||||
'/collections/users/auth-with-password',
|
'/collections/users/record/$userId',
|
||||||
data: {identity: email, password: password},
|
queryParameters: {
|
||||||
|
'firstname': firstName,
|
||||||
|
'lastname': lastname,
|
||||||
|
'secondname': secondName,
|
||||||
|
'datebirthday': datebirthday,
|
||||||
|
'gender': gender,
|
||||||
|
},
|
||||||
);
|
);
|
||||||
|
if (response.data != null) {
|
||||||
|
return response.data;
|
||||||
|
}
|
||||||
|
} on DioException catch (e) {
|
||||||
|
if (e.type == DioExceptionType.connectionError) {
|
||||||
|
lastError = 'Internet Connection Error';
|
||||||
|
} else {
|
||||||
|
lastError = e.response!.data['message'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
setToken() async {
|
||||||
|
String token = '';
|
||||||
|
final loginResponse = await auth.login(
|
||||||
|
'example123123333333@mail.ru',
|
||||||
|
'string213123',
|
||||||
|
);
|
||||||
|
if (loginResponse != null) {
|
||||||
|
token = loginResponse['token'];
|
||||||
|
api.options.headers['Authorization'] = "Bearer $token";
|
||||||
|
|
||||||
|
return loginResponse['record']['id'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
register(
|
||||||
|
String email,
|
||||||
|
String password,
|
||||||
|
String confirmPassword,
|
||||||
|
String firstName,
|
||||||
|
String lastname,
|
||||||
|
String secondName,
|
||||||
|
String datebirthday,
|
||||||
|
String gender,
|
||||||
|
) async {
|
||||||
|
if (password != confirmPassword) {
|
||||||
|
lastError = 'Confirm password != password';
|
||||||
|
} else {
|
||||||
|
try {
|
||||||
|
final response = await api.post(
|
||||||
|
'/collections/users/records',
|
||||||
|
data: {
|
||||||
|
emailKey: email,
|
||||||
|
passwordKey: password,
|
||||||
|
confirmPasswordKey: password,
|
||||||
|
},
|
||||||
|
);
|
||||||
|
if (response.data != null) {
|
||||||
|
final responseData = response.data['id'];
|
||||||
|
final result = await updateUser(
|
||||||
|
responseData,
|
||||||
|
firstName,
|
||||||
|
lastname,
|
||||||
|
secondName,
|
||||||
|
datebirthday,
|
||||||
|
gender,
|
||||||
|
);
|
||||||
|
if (response.data) {
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
||||||
} on DioException catch (e) {
|
} on DioException catch (e) {
|
||||||
if (e.type == DioExceptionType.connectionError) {
|
if (e.type == DioExceptionType.connectionError) {
|
||||||
lastError = 'Internet Connection Error';
|
lastError = 'Internet Connection Error';
|
||||||
@ -34,3 +111,39 @@ class Auth {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
getCurrentUser() async {
|
||||||
|
try {
|
||||||
|
final id = await setToken();
|
||||||
|
final response = await api.get('/collections/users/records/$id');
|
||||||
|
if (response.data != null) {
|
||||||
|
return response.data;
|
||||||
|
}
|
||||||
|
} on DioException catch (e) {
|
||||||
|
if (e.type == DioExceptionType.connectionError) {
|
||||||
|
lastError = 'Internet Connection Error';
|
||||||
|
} else {
|
||||||
|
lastError = e.response!.data['message'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
userLogout(String tokenId) async {
|
||||||
|
try {
|
||||||
|
final response = await api.delete(
|
||||||
|
'/collections/_authOrigins/records/$tokenId',
|
||||||
|
);
|
||||||
|
if (response.data != null) {
|
||||||
|
return response.data;
|
||||||
|
}
|
||||||
|
} on DioException catch (e) {
|
||||||
|
if (e.type == DioExceptionType.connectionError) {
|
||||||
|
lastError = 'Internet Connection Error';
|
||||||
|
} else {
|
||||||
|
lastError = e.response!.data['message'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
final auth = Auth();
|
||||||
|
55
lib/apis/cart.dart
Normal file
55
lib/apis/cart.dart
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
import 'package:dio/dio.dart';
|
||||||
|
import 'package:server/apis/auth.dart';
|
||||||
|
import 'package:server/client.dart';
|
||||||
|
|
||||||
|
class Cart {
|
||||||
|
String lastError = '';
|
||||||
|
|
||||||
|
addToCart(String productId, double count) async {
|
||||||
|
try {
|
||||||
|
final id = await auth.setToken();
|
||||||
|
if (id != null) {
|
||||||
|
final response = await api.post(
|
||||||
|
'/collections/cart/records',
|
||||||
|
data: {'user_id': id, 'product_id': productId, 'count': count},
|
||||||
|
);
|
||||||
|
if (response.data != null) {
|
||||||
|
return 'Well done';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} on DioException catch (e) {
|
||||||
|
if (e.type == DioExceptionType.connectionError) {
|
||||||
|
return "Internet Connection Error";
|
||||||
|
}
|
||||||
|
return e.response!.data['message'];
|
||||||
|
} catch (e) {
|
||||||
|
print(e);
|
||||||
|
return Error();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
changeCartItem(String productId, double count) async {
|
||||||
|
try {
|
||||||
|
final id = await auth.setToken();
|
||||||
|
if (id != null) {
|
||||||
|
final response = await api.post(
|
||||||
|
'/collections/cart/records/{idBucket}',
|
||||||
|
data: {'user_id': id, 'product_id': productId, 'count': count},
|
||||||
|
);
|
||||||
|
if (response.data != null) {
|
||||||
|
return 'Well done';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} on DioException catch (e) {
|
||||||
|
if (e.type == DioExceptionType.connectionError) {
|
||||||
|
return "Internet Connection Error";
|
||||||
|
}
|
||||||
|
return e.response!.data['message'];
|
||||||
|
} catch (e) {
|
||||||
|
print(e);
|
||||||
|
return Error();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
final cart = Cart();
|
27
lib/apis/orders.dart
Normal file
27
lib/apis/orders.dart
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
import 'package:dio/dio.dart';
|
||||||
|
import 'package:server/apis/auth.dart';
|
||||||
|
import 'package:server/client.dart';
|
||||||
|
|
||||||
|
class Orders {
|
||||||
|
String lastError = '';
|
||||||
|
createOrder(productId, count) async {
|
||||||
|
final userId = await auth.setToken();
|
||||||
|
try {
|
||||||
|
final response = await api.post(
|
||||||
|
'/collections/orders/records',
|
||||||
|
data: {'user_id': userId, 'product_id': productId, 'count': count},
|
||||||
|
);
|
||||||
|
if (response.data != null) {
|
||||||
|
return response.data;
|
||||||
|
}
|
||||||
|
} on DioException catch (e) {
|
||||||
|
if (e.type == DioExceptionType.connectionError) {
|
||||||
|
lastError = 'Internet Connection Error';
|
||||||
|
} else {
|
||||||
|
lastError = e.response!.data['message'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
final orders = Orders();
|
67
lib/apis/projects.dart
Normal file
67
lib/apis/projects.dart
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
import 'package:dio/dio.dart';
|
||||||
|
import 'package:server/apis/auth.dart';
|
||||||
|
import 'package:server/server.dart';
|
||||||
|
|
||||||
|
class Projects {
|
||||||
|
getProjects() async {
|
||||||
|
try {
|
||||||
|
final id = await auth.setToken();
|
||||||
|
if (id != null) {
|
||||||
|
final response = await api.get('/collections/project/records');
|
||||||
|
if (response.data != null) {
|
||||||
|
return response.data;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} on DioException catch (e) {
|
||||||
|
if (e.type == DioExceptionType.connectionError) {
|
||||||
|
return "Internet Connection Error";
|
||||||
|
}
|
||||||
|
return e.response!.data['message'];
|
||||||
|
} catch (e) {
|
||||||
|
print(e);
|
||||||
|
return Error();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
createProject(
|
||||||
|
title,
|
||||||
|
typeProject,
|
||||||
|
dateStart,
|
||||||
|
dateEnd,
|
||||||
|
gender,
|
||||||
|
descriptionSource,
|
||||||
|
category,
|
||||||
|
) async {
|
||||||
|
try {
|
||||||
|
final id = await auth.setToken();
|
||||||
|
if (id != null) {
|
||||||
|
final response = await api.post(
|
||||||
|
'/collections/project/records',
|
||||||
|
data: {
|
||||||
|
"title": title,
|
||||||
|
"typeProject": typeProject,
|
||||||
|
"user_id": id,
|
||||||
|
"dateStart": dateStart,
|
||||||
|
"dateEnd": dateEnd,
|
||||||
|
"gender": gender,
|
||||||
|
"description_source": descriptionSource,
|
||||||
|
"category": category,
|
||||||
|
},
|
||||||
|
);
|
||||||
|
if (response.data != null) {
|
||||||
|
return response.data;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} on DioException catch (e) {
|
||||||
|
if (e.type == DioExceptionType.connectionError) {
|
||||||
|
return "Internet Connection Error";
|
||||||
|
}
|
||||||
|
return e.response!.data['message'];
|
||||||
|
} catch (e) {
|
||||||
|
print(e);
|
||||||
|
return Error();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
final projects = Projects();
|
69
lib/apis/shop.dart
Normal file
69
lib/apis/shop.dart
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
// ignore_for_file: unnecessary_brace_in_string_interps
|
||||||
|
|
||||||
|
import 'package:dio/dio.dart';
|
||||||
|
import 'package:server/apis/auth.dart';
|
||||||
|
import 'package:server/client.dart';
|
||||||
|
|
||||||
|
class Shop {
|
||||||
|
String lastError = '';
|
||||||
|
|
||||||
|
getNews() async {
|
||||||
|
await auth.setToken();
|
||||||
|
try {
|
||||||
|
final response = await api.get('/collections/news/records');
|
||||||
|
if (response.data != null) {
|
||||||
|
return response.data;
|
||||||
|
}
|
||||||
|
} on DioException catch (e) {
|
||||||
|
if (e.type == DioExceptionType.connectionError) {
|
||||||
|
lastError = 'Internet Connection errror';
|
||||||
|
}
|
||||||
|
lastError = e.response!.data['message'];
|
||||||
|
} catch (e) {
|
||||||
|
print('empty error');
|
||||||
|
return 'empty errror';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
getCatalog() async {
|
||||||
|
await auth.setToken();
|
||||||
|
try {
|
||||||
|
final response = await api.get('collections/products/records');
|
||||||
|
if (response.data != null) {
|
||||||
|
return response.data;
|
||||||
|
} else {
|
||||||
|
return Error();
|
||||||
|
}
|
||||||
|
} on DioException catch (e) {
|
||||||
|
if (e.type == DioExceptionType.connectionError) {
|
||||||
|
lastError = 'Internet Connection errror';
|
||||||
|
}
|
||||||
|
lastError = e.response!.data['message'];
|
||||||
|
} catch (e) {
|
||||||
|
print('empty error');
|
||||||
|
return 'empty errror';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
getProductDesc(productId) async {
|
||||||
|
await auth.setToken();
|
||||||
|
try {
|
||||||
|
final response = await api.get('collections/products/records/$productId');
|
||||||
|
if (response.data != null) {
|
||||||
|
return response.data;
|
||||||
|
} else {
|
||||||
|
return Error();
|
||||||
|
}
|
||||||
|
} on DioException catch (e) {
|
||||||
|
if (e.type == DioExceptionType.connectionError) {
|
||||||
|
lastError = 'Internet Connection errror';
|
||||||
|
}
|
||||||
|
lastError = e.response!.data['message'];
|
||||||
|
} catch (e) {
|
||||||
|
print('empty error');
|
||||||
|
return 'empty errror';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
final shop = Shop();
|
21
lib/apis/tokens.dart
Normal file
21
lib/apis/tokens.dart
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
import 'package:dio/dio.dart';
|
||||||
|
import 'package:server/client.dart';
|
||||||
|
|
||||||
|
class Tokens {
|
||||||
|
String lastError = '';
|
||||||
|
|
||||||
|
getAccessToken() async {
|
||||||
|
try {
|
||||||
|
final response = await api.get('/collections/_authOrigins/records');
|
||||||
|
return response.data['items'][0]['id'];
|
||||||
|
} on DioException catch (e) {
|
||||||
|
if (e.type == DioExceptionType.connectionError) {
|
||||||
|
lastError = 'Internet Connection Error';
|
||||||
|
} else {
|
||||||
|
lastError = e.response!.data['message'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
final tokens = Tokens();
|
@ -45,3 +45,13 @@ setToken(value) async {
|
|||||||
final prefs = await getLocalStorageInstance();
|
final prefs = await getLocalStorageInstance();
|
||||||
prefs.setString(token, value);
|
prefs.setString(token, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
setKey(key, value) async {
|
||||||
|
final prefs = await getLocalStorageInstance();
|
||||||
|
prefs.setString(key, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
getKey(key) async {
|
||||||
|
final prefs = await getLocalStorageInstance();
|
||||||
|
prefs.get(key);
|
||||||
|
}
|
||||||
|
@ -1,4 +1,7 @@
|
|||||||
const token = "token";
|
const token = "token";
|
||||||
|
|
||||||
const identity = 'identity';
|
const emailKey = 'email';
|
||||||
const password = 'password';
|
const identityKey = 'identity';
|
||||||
|
const passwordKey = 'password';
|
||||||
|
const confirmPasswordKey = 'passwordConfirm';
|
||||||
|
const id = 'user_id';
|
||||||
|
@ -1,5 +1,154 @@
|
|||||||
import 'package:flutter_test/flutter_test.dart';
|
import 'package:flutter_test/flutter_test.dart';
|
||||||
|
import 'package:server/apis/auth.dart';
|
||||||
|
import 'package:server/apis/cart.dart';
|
||||||
|
import 'package:server/apis/orders.dart';
|
||||||
|
import 'package:server/apis/projects.dart';
|
||||||
|
import 'package:server/apis/shop.dart';
|
||||||
|
import 'package:server/apis/tokens.dart';
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
test('adds one to input values', () {});
|
test('Спринт 2. Авторизация', () async {
|
||||||
|
try {
|
||||||
|
final response = await auth.login(
|
||||||
|
'example123123333333@mail.ru',
|
||||||
|
'string213123',
|
||||||
|
);
|
||||||
|
if (response != null) {
|
||||||
|
expect(response['record']['email'], 'example123123333333@mail.ru');
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
// ignore: avoid_print
|
||||||
|
print(e);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
test('Создание заказа', () async {
|
||||||
|
final productsList = await shop.getCatalog();
|
||||||
|
final firstProduct = productsList['items'][0];
|
||||||
|
|
||||||
|
try {
|
||||||
|
final response = await orders.createOrder(firstProduct['id'], 10);
|
||||||
|
if (response != null) {
|
||||||
|
expect(response['count'], 10);
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
// ignore: avoid_print
|
||||||
|
print(e);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
test('Спринт 2. Создание пользователя', () async {
|
||||||
|
try {
|
||||||
|
final response = await auth.register(
|
||||||
|
'example123123333333@mail2.ru',
|
||||||
|
'string213123',
|
||||||
|
'string213123',
|
||||||
|
'testtest',
|
||||||
|
'testtest',
|
||||||
|
'testtest',
|
||||||
|
'testtest',
|
||||||
|
'testtest',
|
||||||
|
);
|
||||||
|
if (response != null) {
|
||||||
|
expect(response['record']['firstname'], 'testtest');
|
||||||
|
} else {
|
||||||
|
expect('1', '2');
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
// ignore: avoid_print
|
||||||
|
print(e);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
test('Спринт 2. Получение каталога-3', () async {
|
||||||
|
try {
|
||||||
|
final response = await shop.getCatalog();
|
||||||
|
if (response != null) {
|
||||||
|
expect(response['perPage'], 30);
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
print(e);
|
||||||
|
return Error();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
test('Спринт 2. Акции и новости', () async {
|
||||||
|
try {
|
||||||
|
final response = await shop.getNews();
|
||||||
|
if (response != null) {
|
||||||
|
expect(response['perPage'], 30);
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
print(e);
|
||||||
|
return Error();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
test('Спринт 2. Добавление в корзину', () async {
|
||||||
|
try {
|
||||||
|
final response = await cart.addToCart('string', 10);
|
||||||
|
expect(response['count'], 10);
|
||||||
|
} catch (e) {
|
||||||
|
print(e);
|
||||||
|
return Error();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
test('Спринт 2.Получение информации о профиле', () async {
|
||||||
|
try {
|
||||||
|
final response = await auth.getCurrentUser();
|
||||||
|
if (response != null) {
|
||||||
|
expect(response['firstname'], 'testtest');
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
print(e);
|
||||||
|
return Error();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
test('Спринт 2.Логаут пользователя', () async {
|
||||||
|
try {
|
||||||
|
final currentId = await tokens.getAccessToken();
|
||||||
|
if (currentId != null) {
|
||||||
|
final response = await auth.userLogout(currentId);
|
||||||
|
return response.data;
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
print(e);
|
||||||
|
return Error();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
test('Создание проекта', () async {
|
||||||
|
try {
|
||||||
|
final response = await projects.createProject(
|
||||||
|
'1233213',
|
||||||
|
'123312321',
|
||||||
|
'123321123',
|
||||||
|
'123321',
|
||||||
|
'123231',
|
||||||
|
'123312',
|
||||||
|
'123312',
|
||||||
|
);
|
||||||
|
if (response != null) {
|
||||||
|
expect(response['title'], '1233213');
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
// ignore: avoid_print
|
||||||
|
print(e);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
test('Список проектов', () async {
|
||||||
|
try {
|
||||||
|
final response = await projects.getProjects();
|
||||||
|
if (response != null) {
|
||||||
|
expect(response['perPage'], 30);
|
||||||
|
} else {
|
||||||
|
expect('1', '2');
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
// ignore: avoid_print
|
||||||
|
print(e);
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user