Test Server Endpoints
This commit is contained in:
parent
d4bf238f50
commit
01a603b8d4
@ -57,7 +57,7 @@ class ResponseHelpers {
|
|||||||
|
|
||||||
static Response fromError(IError error) {
|
static Response fromError(IError error) {
|
||||||
// Print error to console
|
// Print error to console
|
||||||
print('Error: ${error.code.name} - ${error.message}');
|
print('ErrorResponse: ${error.code.name} - ${error.message}');
|
||||||
//print(error.stackTrace);
|
//print(error.stackTrace);
|
||||||
return Response(
|
return Response(
|
||||||
mapErrorCodeToHttpStatus(error.code),
|
mapErrorCodeToHttpStatus(error.code),
|
||||||
|
@ -5,6 +5,5 @@ import 'package:crypto/crypto.dart';
|
|||||||
String generateSecureHash(String input) {
|
String generateSecureHash(String input) {
|
||||||
final bytes = utf8.encode(input);
|
final bytes = utf8.encode(input);
|
||||||
final hash = sha256.convert(bytes);
|
final hash = sha256.convert(bytes);
|
||||||
print(hash);
|
|
||||||
return hash.toString();
|
return hash.toString();
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,8 @@
|
|||||||
|
import 'package:backend_dart/domain/data/database.dart';
|
||||||
import 'package:backend_dart/infrastructure/data/prisma_database.dart';
|
import 'package:backend_dart/infrastructure/data/prisma_database.dart';
|
||||||
import 'package:riverpod/riverpod.dart';
|
import 'package:riverpod/riverpod.dart';
|
||||||
|
|
||||||
final databaseProvider = Provider<PrismaDatabase>((ref) {
|
final databaseProvider = Provider<IDatabase>((ref) {
|
||||||
// Hier die Datenbankverbindung initialisieren
|
// Hier die Datenbankverbindung initialisieren
|
||||||
final database = PrismaDatabase();
|
final database = PrismaDatabase();
|
||||||
return database;
|
return database;
|
||||||
|
48
backend-dart/test/extensions.dart
Normal file
48
backend-dart/test/extensions.dart
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
// get nullable
|
||||||
|
import 'dart:convert';
|
||||||
|
|
||||||
|
import 'package:backend_dart/domain/entities/user.dart';
|
||||||
|
import 'package:backend_dart/domain/errors/error.dart';
|
||||||
|
import 'package:fpdart/fpdart.dart';
|
||||||
|
import 'package:shelf/shelf.dart';
|
||||||
|
import 'package:test/test.dart';
|
||||||
|
|
||||||
|
extension NullableGet<T> on TaskEither<IError, T> {
|
||||||
|
// !THIS IS ONLY FOR TESTING PURPOSES!
|
||||||
|
Future<T?> get get {
|
||||||
|
return match((e) => null, identity).run();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
String? extractSessionTokenFromCookie(String? token) {
|
||||||
|
if (token == null) return null;
|
||||||
|
final parts = token.split('=');
|
||||||
|
if (parts[0] == 'session_token' && parts[1].isNotEmpty) {
|
||||||
|
return parts[1];
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<String?> createLoggedInToken(
|
||||||
|
User? user,
|
||||||
|
Handler handler, {
|
||||||
|
String password = 'password',
|
||||||
|
}) async {
|
||||||
|
if (user == null) {
|
||||||
|
fail('User creation failed');
|
||||||
|
}
|
||||||
|
final responseLogin = await handler(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,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
));
|
||||||
|
return extractSessionTokenFromCookie(responseLogin.headers['Set-Cookie']);
|
||||||
|
}
|
152
backend-dart/test/server_test.dart
Normal file
152
backend-dart/test/server_test.dart
Normal file
@ -0,0 +1,152 @@
|
|||||||
|
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');
|
||||||
|
});
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user