mirror of
https://github.com/inventree/inventree-app.git
synced 2025-04-29 05:56:47 +00:00
commit
ffae280d31
1
.github/workflows/ci.yaml
vendored
1
.github/workflows/ci.yaml
vendored
@ -60,6 +60,7 @@ jobs:
|
|||||||
invoke import-fixtures
|
invoke import-fixtures
|
||||||
invoke server -a 127.0.0.1:12345 &
|
invoke server -a 127.0.0.1:12345 &
|
||||||
invoke wait
|
invoke wait
|
||||||
|
sleep 30
|
||||||
- name: Unit Tests
|
- name: Unit Tests
|
||||||
run: |
|
run: |
|
||||||
flutter test --coverage
|
flutter test --coverage
|
||||||
|
@ -497,7 +497,7 @@ class InvenTreeAPI {
|
|||||||
/*
|
/*
|
||||||
* Request the user roles (permissions) from the InvenTree server
|
* Request the user roles (permissions) from the InvenTree server
|
||||||
*/
|
*/
|
||||||
Future<void> getUserRoles() async {
|
Future<bool> getUserRoles() async {
|
||||||
|
|
||||||
roles.clear();
|
roles.clear();
|
||||||
|
|
||||||
@ -511,7 +511,7 @@ class InvenTreeAPI {
|
|||||||
final response = await get(_URL_GET_ROLES, expectedStatusCode: 200);
|
final response = await get(_URL_GET_ROLES, expectedStatusCode: 200);
|
||||||
|
|
||||||
if (!response.successful()) {
|
if (!response.successful()) {
|
||||||
return;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
var data = response.asMap();
|
var data = response.asMap();
|
||||||
@ -519,6 +519,10 @@ class InvenTreeAPI {
|
|||||||
if (data.containsKey("roles")) {
|
if (data.containsKey("roles")) {
|
||||||
// Save a local copy of the user roles
|
// Save a local copy of the user roles
|
||||||
roles = (response.data["roles"] ?? {}) as Map<String, dynamic>;
|
roles = (response.data["roles"] ?? {}) as Map<String, dynamic>;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -129,10 +129,13 @@ void main() {
|
|||||||
assert(api.supportsNotifications);
|
assert(api.supportsNotifications);
|
||||||
assert(api.supportsPoReceive);
|
assert(api.supportsPoReceive);
|
||||||
|
|
||||||
|
// Ensure we can request (and receive) user roles
|
||||||
|
assert(await api.getUserRoles());
|
||||||
|
|
||||||
// Check available permissions
|
// Check available permissions
|
||||||
assert(api.checkPermission("part", "change"));
|
assert(api.checkPermission("part", "change"));
|
||||||
assert(api.checkPermission("stocklocation", "delete"));
|
assert(api.checkPermission("stocklocation", "delete"));
|
||||||
assert(api.checkPermission("part", "weirdpermission"));
|
assert(!api.checkPermission("part", "weirdpermission"));
|
||||||
assert(api.checkPermission("blah", "bloo"));
|
assert(api.checkPermission("blah", "bloo"));
|
||||||
});
|
});
|
||||||
|
|
||||||
|
143
test/models_test.dart
Normal file
143
test/models_test.dart
Normal file
@ -0,0 +1,143 @@
|
|||||||
|
/*
|
||||||
|
* Unit tests for accessing various model classes via the API
|
||||||
|
*/
|
||||||
|
|
||||||
|
import "package:inventree/inventree/model.dart";
|
||||||
|
import "package:test/test.dart";
|
||||||
|
|
||||||
|
import "package:inventree/api.dart";
|
||||||
|
import "package:inventree/user_profile.dart";
|
||||||
|
import "package:inventree/inventree/part.dart";
|
||||||
|
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
|
||||||
|
setUp(() async {
|
||||||
|
await UserProfileDBManager().addProfile(UserProfile(
|
||||||
|
name: "Test Profile",
|
||||||
|
server: "http://localhost:12345",
|
||||||
|
username: "testuser",
|
||||||
|
password: "testpassword",
|
||||||
|
selected: true,
|
||||||
|
));
|
||||||
|
|
||||||
|
assert(await UserProfileDBManager().selectProfileByName("Test Profile"));
|
||||||
|
assert(await InvenTreeAPI().connectToServer());
|
||||||
|
});
|
||||||
|
|
||||||
|
group("Category Tests:", () {
|
||||||
|
test("Basics", () async {
|
||||||
|
assert(InvenTreePartCategory().URL == "part/category/");
|
||||||
|
});
|
||||||
|
|
||||||
|
test("List Categories", () async {
|
||||||
|
List<InvenTreeModel> results;
|
||||||
|
|
||||||
|
// List *all* categories
|
||||||
|
results = await InvenTreePartCategory().list();
|
||||||
|
assert(results.length == 8);
|
||||||
|
|
||||||
|
for (var result in results) {
|
||||||
|
assert(result is InvenTreePartCategory);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Filter by parent category
|
||||||
|
results = await InvenTreePartCategory().list(
|
||||||
|
filters: {
|
||||||
|
"parent": "1",
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
assert(results.length == 3);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
group("Part Tests:", () {
|
||||||
|
|
||||||
|
test("Basics", () async {
|
||||||
|
assert(InvenTreePart().URL == "part/");
|
||||||
|
});
|
||||||
|
|
||||||
|
test("List Parts", () async {
|
||||||
|
List<InvenTreeModel> results;
|
||||||
|
|
||||||
|
// List *all* parts
|
||||||
|
results = await InvenTreePart().list();
|
||||||
|
assert(results.length == 13);
|
||||||
|
|
||||||
|
for (var result in results) {
|
||||||
|
// results must be InvenTreePart instances
|
||||||
|
assert(result is InvenTreePart);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Filter by category
|
||||||
|
results = await InvenTreePart().list(
|
||||||
|
filters: {
|
||||||
|
"category": "2",
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
assert(results.length == 2);
|
||||||
|
});
|
||||||
|
|
||||||
|
test("Part Detail", () async {
|
||||||
|
final result = await InvenTreePart().get(1);
|
||||||
|
|
||||||
|
assert(result != null);
|
||||||
|
assert(result is InvenTreePart);
|
||||||
|
|
||||||
|
if (result != null) {
|
||||||
|
InvenTreePart part = result as InvenTreePart;
|
||||||
|
|
||||||
|
// Check some basic properties of the part
|
||||||
|
assert(part.name == "M2x4 LPHS");
|
||||||
|
assert(part.fullname == "M2x4 LPHS");
|
||||||
|
assert(part.description == "M2x4 low profile head screw");
|
||||||
|
assert(part.categoryId == 8);
|
||||||
|
assert(part.categoryName == "Fasteners");
|
||||||
|
assert(part.image == part.thumbnail);
|
||||||
|
assert(part.thumbnail == "/static/img/blank_image.thumbnail.png");
|
||||||
|
|
||||||
|
// Stock information
|
||||||
|
assert(part.unallocatedStockString == "9000");
|
||||||
|
assert(part.inStockString == "9000");
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
test("Part Adjust", () async {
|
||||||
|
// Test that we can update part data
|
||||||
|
final result = await InvenTreePart().get(1);
|
||||||
|
|
||||||
|
assert(result != null);
|
||||||
|
assert(result is InvenTreePart);
|
||||||
|
|
||||||
|
if (result != null) {
|
||||||
|
InvenTreePart part = result as InvenTreePart;
|
||||||
|
assert(part.name == "M2x4 LPHS");
|
||||||
|
|
||||||
|
// Change the name to something else
|
||||||
|
assert(await part.update(
|
||||||
|
values: {
|
||||||
|
"name": "Woogle",
|
||||||
|
}
|
||||||
|
));
|
||||||
|
|
||||||
|
assert(await part.reload());
|
||||||
|
assert(part.name == "Woogle");
|
||||||
|
|
||||||
|
// And change it back again
|
||||||
|
assert(await part.update(
|
||||||
|
values: {
|
||||||
|
"name": "M2x4 LPHS"
|
||||||
|
}
|
||||||
|
));
|
||||||
|
|
||||||
|
assert(await part.reload());
|
||||||
|
assert(part.name == "M2x4 LPHS");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user