153 lines
4.4 KiB
Dart
153 lines
4.4 KiB
Dart
import 'dart:convert';
|
|
|
|
import 'package:backend_dart/application/service/dto/user_dto.dart';
|
|
import 'package:backend_dart/domain/entities/user.dart';
|
|
import 'package:backend_dart/domain/errors/error.dart';
|
|
import 'package:backend_dart/infrastructure/data/database_provider.dart';
|
|
import 'package:backend_dart/interfaces/http/router.dart';
|
|
import 'package:fpdart/fpdart.dart';
|
|
import 'package:riverpod/riverpod.dart';
|
|
import 'package:shelf/shelf.dart';
|
|
import 'package:test/test.dart';
|
|
|
|
import 'extensions.dart';
|
|
import 'mocks/mock_database.dart';
|
|
|
|
void main() {
|
|
late MockDatabase database;
|
|
late Handler testHandler;
|
|
|
|
late TaskEither<IError, User> defaultUser;
|
|
setUpAll(
|
|
() async {
|
|
database = MockDatabase();
|
|
final container = ProviderContainer(
|
|
overrides: [
|
|
// Add any overrides here
|
|
databaseProvider.overrideWithValue(database),
|
|
],
|
|
);
|
|
// Load the router from the router file
|
|
testHandler = Pipeline()
|
|
.addMiddleware(logRequests()) // Logs all incoming requests
|
|
.addHandler(getRouter(container).call);
|
|
},
|
|
);
|
|
|
|
setUp(
|
|
() async {
|
|
database.clear(); // Clear the database before each test
|
|
defaultUser = database.users.create(UserCreate(
|
|
email: 'user@example.com',
|
|
password: 'password',
|
|
name: 'John Doe1',
|
|
));
|
|
},
|
|
);
|
|
|
|
test('Check health', () async {
|
|
final response =
|
|
await testHandler(Request('GET', Uri.parse('http://localhost/health')));
|
|
expect(response.statusCode, 200, reason: 'Server health is abnormal');
|
|
});
|
|
|
|
test('Login', () async {
|
|
final user = await defaultUser.get;
|
|
|
|
if (user == null) {
|
|
fail('User creation failed');
|
|
}
|
|
|
|
final responseLogin = await testHandler(Request(
|
|
'POST',
|
|
Uri.parse('http://localhost/api/auth/login'),
|
|
headers: <String, String>{
|
|
'Content-Type': 'application/json',
|
|
},
|
|
body: jsonEncode(
|
|
<String, String>{
|
|
'email': user.email,
|
|
'password': 'password',
|
|
},
|
|
),
|
|
));
|
|
expect(responseLogin.statusCode, 200, reason: 'Login failed');
|
|
expect(responseLogin.headers['Set-Cookie'], isNotNull,
|
|
reason: 'Cookies not found');
|
|
expect(extractSessionTokenFromCookie(responseLogin.headers['Set-Cookie']),
|
|
isNotEmpty,
|
|
reason: 'Session token not found');
|
|
});
|
|
|
|
test('Logout', () async {
|
|
final token = await createLoggedInToken(await defaultUser.get, testHandler);
|
|
|
|
if (token == null) {
|
|
fail('User creation failed');
|
|
}
|
|
|
|
final responseLogout = await testHandler(Request(
|
|
'POST',
|
|
Uri.parse('http://localhost/api/auth/logout'),
|
|
headers: <String, String>{
|
|
'Content-Type': 'application/json',
|
|
'Cookie': 'session_token=$token',
|
|
},
|
|
));
|
|
expect(responseLogout.statusCode, 200, reason: 'Logout failed');
|
|
final responseLogout2 = await testHandler(Request(
|
|
'POST',
|
|
Uri.parse('http://localhost/api/auth/logout'),
|
|
headers: <String, String>{
|
|
'Content-Type': 'application/json',
|
|
'Cookie': 'session_token=$token',
|
|
},
|
|
));
|
|
expect(responseLogout2.statusCode, 401, reason: 'Logout should fail');
|
|
});
|
|
|
|
test('CreateUser', () async {
|
|
final token = await createLoggedInToken(await defaultUser.get, testHandler);
|
|
|
|
final userCreate = UserCreateDto(
|
|
email: 'user@example.com',
|
|
password: 'password',
|
|
name: 'John Doe1',
|
|
);
|
|
|
|
final responseCreate = await testHandler(Request(
|
|
'POST',
|
|
Uri.parse('http://localhost/api/users/'),
|
|
headers: <String, String>{
|
|
'Content-Type': 'application/json',
|
|
'Cookie': 'session_token=$token',
|
|
},
|
|
body: jsonEncode(userCreate.toJson()),
|
|
));
|
|
expect(responseCreate.statusCode, 200, reason: 'User creation failed');
|
|
});
|
|
|
|
test('GetUser', () async {
|
|
final token = await createLoggedInToken(await defaultUser.get, testHandler);
|
|
final newUser = await database.users
|
|
.create(UserCreate(
|
|
email: 'user@example.com',
|
|
password: 'password',
|
|
name: 'John Doe1',
|
|
))
|
|
.get;
|
|
|
|
if (newUser == null) {
|
|
fail('User creation failed');
|
|
}
|
|
final responseCreate = await testHandler(Request(
|
|
'GET',
|
|
Uri.parse('http://localhost/api/users/${newUser.id}'),
|
|
headers: <String, String>{
|
|
'Cookie': 'session_token=$token',
|
|
},
|
|
));
|
|
expect(responseCreate.statusCode, 200, reason: 'User creation failed');
|
|
});
|
|
}
|