Skip to content

Commit

Permalink
pr suggestion
Browse files Browse the repository at this point in the history
  • Loading branch information
erickzanardo committed Jun 23, 2023
1 parent 5adeff5 commit f674f3e
Show file tree
Hide file tree
Showing 6 changed files with 372 additions and 310 deletions.
2 changes: 1 addition & 1 deletion examples/basic_authentication/analysis_options.yaml
@@ -1,4 +1,4 @@
include: package:very_good_analysis/analysis_options.4.0.0.yaml
include: package:very_good_analysis/analysis_options.5.0.0.yaml
analyzer:
exclude:
- build/**
Expand Down
2 changes: 1 addition & 1 deletion examples/basic_authentication/pubspec.yaml
Expand Up @@ -16,4 +16,4 @@ dependencies:
dev_dependencies:
mocktail: ^0.3.0
test: ^1.19.2
very_good_analysis: ^4.0.0
very_good_analysis: ^5.0.0
5 changes: 5 additions & 0 deletions examples/basic_authentication/routes/users/[id].dart
Expand Up @@ -27,6 +27,11 @@ Future<Response> _getUser(RequestContext context, String id) async {
}

Future<Response> _updateUser(RequestContext context, String id) async {
final user = context.read<User>();
if (user.id != id) {
return Response(statusCode: HttpStatus.forbidden);
}

final body = await context.request.json() as Map<String, dynamic>;
final name = body['name'] as String?;
final username = body['username'] as String?;
Expand Down
233 changes: 233 additions & 0 deletions examples/basic_authentication/test/lib/user_repository_test.dart
@@ -0,0 +1,233 @@
// ignore_for_file: prefer_const_constructors

import 'package:basic_authentication/user_repository.dart';
import 'package:test/test.dart';

void main() {
const id = 'ae5deb822e0d71992900471a7199d0d95b8e7c9d05c40a8245a281fd2c1d6684';
const password =
'5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8';
const updatedPassword =
'089542505d659cecbb988bb5ccff5bccf85be2dfa8c221359079aee2531298bb';

group('UserRepository', () {
test('can be instantiated', () {
expect(UserRepository(), isNotNull);
});

group('userFromCredentials', () {
test('userFromCredentials return null if no user is found', () async {
mockUserData([]);
final repository = UserRepository();
final user =
await repository.userFromCredentials('testuser', 'password');

expect(user, isNull);
});

test('userFromCredentials return null if password is incorrect',
() async {
mockUserData([
User(
id: id,
name: 'Test User',
username: 'testuser',
password: password,
),
]);
final repository = UserRepository();
final user = await repository.userFromCredentials('testuser', 'wrong');

expect(user, isNull);
});

test('userFromCredentials return user if password is correct', () async {
mockUserData([
User(
id: id,
name: 'Test User',
username: 'testuser',
password: password,
),
]);

final repository = UserRepository();
final user =
await repository.userFromCredentials('testuser', 'password');

expect(
user,
equals(
User(
id: id,
name: 'Test User',
username: 'testuser',
password: password,
),
),
);
});
});

test('createUser adds a new user, returning its id', () async {
mockUserData([]);
final repository = UserRepository();
final returnedId = await repository.createUser(
name: 'Test User',
username: 'testuser',
password: 'password',
);

expect(returnedId, equals(id));

expect(
getDb(),
equals([
User(
id: id,
name: 'Test User',
username: 'testuser',
password: password,
),
]),
);
});

test('deleteUser deletes a user', () async {
mockUserData([
User(
id: id,
name: 'Test User',
username: 'testuser',
password: password,
),
]);
final repository = UserRepository();
await repository.deleteUser(id);

expect(getDb(), isEmpty);
});

group('updateUser', () {
test('updates the user on the db', () async {
mockUserData([
User(
id: id,
name: 'Test User',
username: 'testuser',
password: password,
),
]);
final repository = UserRepository();
await repository.updateUser(
id: id,
name: 'New Name',
username: 'newusername',
password: 'newpassword',
);

expect(
getDb(),
equals([
User(
id: id,
name: 'New Name',
username: 'newusername',
password: updatedPassword,
),
]),
);
});

test('can update just the name', () async {
mockUserData([
User(
id: id,
name: 'Test User',
username: 'testuser',
password: password,
),
]);
final repository = UserRepository();
await repository.updateUser(
id: id,
name: 'New Name',
username: null,
password: null,
);

expect(
getDb(),
equals([
User(
id: id,
name: 'New Name',
username: 'testuser',
password: password,
),
]),
);
});

test('can update just the username', () async {
mockUserData([
User(
id: id,
name: 'Test User',
username: 'testuser',
password: password,
),
]);
final repository = UserRepository();
await repository.updateUser(
id: id,
name: null,
username: 'newusername',
password: null,
);

expect(
getDb(),
equals([
User(
id: id,
name: 'Test User',
username: 'newusername',
password: password,
),
]),
);
});

test('can update just the password', () async {
mockUserData([
User(
id: id,
name: 'Test User',
username: 'testuser',
password: password,
),
]);
final repository = UserRepository();
await repository.updateUser(
id: id,
name: null,
username: null,
password: 'newpassword',
);

expect(
getDb(),
equals([
User(
id: id,
name: 'Test User',
username: 'testuser',
password: updatedPassword,
),
]),
);
});
});
});
}

0 comments on commit f674f3e

Please sign in to comment.