Test Server Endpoints
This commit is contained in:
parent
d4bf238f50
commit
01a603b8d4
@ -57,7 +57,7 @@ class ResponseHelpers {
|
||||
|
||||
static Response fromError(IError error) {
|
||||
// Print error to console
|
||||
print('Error: ${error.code.name} - ${error.message}');
|
||||
print('ErrorResponse: ${error.code.name} - ${error.message}');
|
||||
//print(error.stackTrace);
|
||||
return Response(
|
||||
mapErrorCodeToHttpStatus(error.code),
|
||||
|
@ -5,6 +5,5 @@ import 'package:crypto/crypto.dart';
|
||||
String generateSecureHash(String input) {
|
||||
final bytes = utf8.encode(input);
|
||||
final hash = sha256.convert(bytes);
|
||||
print(hash);
|
||||
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:riverpod/riverpod.dart';
|
||||
|
||||
final databaseProvider = Provider<PrismaDatabase>((ref) {
|
||||
final databaseProvider = Provider<IDatabase>((ref) {
|
||||
// Hier die Datenbankverbindung initialisieren
|
||||
final database = PrismaDatabase();
|
||||
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