2
0
mirror of https://github.com/inventree/inventree-app.git synced 2025-04-27 21:16:48 +00:00

More checks

This commit is contained in:
Oliver Walters 2022-05-22 09:56:22 +10:00
parent 53b69d9623
commit b98f044204
7 changed files with 50 additions and 30 deletions

View File

@ -208,7 +208,7 @@ class InvenTreeAPI {
* Check server connection and display messages if not connected.
* Useful as a precursor check before performing operations.
*/
bool checkConnection(BuildContext context) {
bool checkConnection() {
// Firstly, is the server connected?
if (!isConnected()) {
@ -292,14 +292,10 @@ class InvenTreeAPI {
static final InvenTreeAPI _api = InvenTreeAPI._internal();
// API endpoint for receiving purchase order line items was introduced in v12
bool supportPoReceive() {
return apiVersion >= 12;
}
bool get supportsPoReceive => apiVersion >= 12;
// "Modern" API transactions were implemented in API v14
bool supportModernStockTransactions() {
return apiVersion >= 14;
}
bool get supportsModernStockTransactions => apiVersion >= 14;
/*
* Connect to the remote InvenTree server:

View File

@ -533,7 +533,7 @@ class InvenTreeStockItem extends InvenTreeModel {
Map<String, dynamic> data = {};
// Note: Format of adjustment API was updated in API v14
if (api.supportModernStockTransactions()) {
if (api.supportsModernStockTransactions) {
// Modern (> 14) API
data = {
"items": [
@ -560,7 +560,7 @@ class InvenTreeStockItem extends InvenTreeModel {
}
// Expected API return code depends on server API version
final int expected_response = api.supportModernStockTransactions() ? 201 : 200;
final int expected_response = api.supportsModernStockTransactions ? 201 : 200;
var response = await api.post(
endpoint,

View File

@ -34,7 +34,7 @@ class InvenTreeDrawer extends StatelessWidget {
void _search() {
if (!InvenTreeAPI().checkConnection(context)) return;
if (!InvenTreeAPI().checkConnection()) return;
_closeDrawer();
@ -51,7 +51,7 @@ class InvenTreeDrawer extends StatelessWidget {
* Upon successful scan, data are passed off to be decoded.
*/
Future <void> _scan() async {
if (!InvenTreeAPI().checkConnection(context)) return;
if (!InvenTreeAPI().checkConnection()) return;
_closeDrawer();
scanQrCode(context);

View File

@ -71,13 +71,13 @@ class _InvenTreeHomePageState extends State<InvenTreeHomePage> {
UserProfile? _profile;
void _scan(BuildContext context) {
if (!InvenTreeAPI().checkConnection(context)) return;
if (!InvenTreeAPI().checkConnection()) return;
scanQrCode(context);
}
void _showParts(BuildContext context) {
if (!InvenTreeAPI().checkConnection(context)) return;
if (!InvenTreeAPI().checkConnection()) return;
Navigator.push(context, MaterialPageRoute(builder: (context) => CategoryDisplayWidget(null)));
}
@ -87,7 +87,7 @@ class _InvenTreeHomePageState extends State<InvenTreeHomePage> {
}
void _showStarredParts(BuildContext context) {
if (!InvenTreeAPI().checkConnection(context)) return;
if (!InvenTreeAPI().checkConnection()) return;
Navigator.push(
context,
@ -100,13 +100,13 @@ class _InvenTreeHomePageState extends State<InvenTreeHomePage> {
}
void _showStock(BuildContext context) {
if (!InvenTreeAPI().checkConnection(context)) return;
if (!InvenTreeAPI().checkConnection()) return;
Navigator.push(context, MaterialPageRoute(builder: (context) => LocationDisplayWidget(null)));
}
void _showPurchaseOrders(BuildContext context) {
if (!InvenTreeAPI().checkConnection(context)) return;
if (!InvenTreeAPI().checkConnection()) return;
Navigator.push(
context,
@ -118,19 +118,19 @@ class _InvenTreeHomePageState extends State<InvenTreeHomePage> {
/*
void _showSuppliers(BuildContext context) {
if (!InvenTreeAPI().checkConnection(context)) return;
if (!InvenTreeAPI().checkConnection()) return;
Navigator.push(context, MaterialPageRoute(builder: (context) => CompanyListWidget(L10().suppliers, {"is_supplier": "true"})));
}
void _showManufacturers(BuildContext context) {
if (!InvenTreeAPI().checkConnection(context)) return;
if (!InvenTreeAPI().checkConnection()) return;
Navigator.push(context, MaterialPageRoute(builder: (context) => CompanyListWidget(L10().manufacturers, {"is_manufacturer": "true"})));
}
void _showCustomers(BuildContext context) {
if (!InvenTreeAPI().checkConnection(context)) return;
if (!InvenTreeAPI().checkConnection()) return;
Navigator.push(context, MaterialPageRoute(builder: (context) => CompanyListWidget(L10().customers, {"is_customer": "true"})));
}

View File

@ -247,7 +247,7 @@ class _PurchaseOrderDetailState extends RefreshableState<PurchaseOrderDetailWidg
);
*/
if (order.isPlaced && InvenTreeAPI().supportPoReceive()) {
if (order.isPlaced && InvenTreeAPI().supportsPoReceive) {
children.add(
SimpleDialogOption(
onPressed: () {

View File

@ -311,7 +311,7 @@ class _StockItemDisplayState extends RefreshableState<StockDetailWidget> {
Future <void> _addStockDialog() async {
// TODO: In future, deprecate support for older API
if (InvenTreeAPI().supportModernStockTransactions()) {
if (InvenTreeAPI().supportsModernStockTransactions) {
Map<String, dynamic> fields = {
"pk": {
@ -391,7 +391,7 @@ class _StockItemDisplayState extends RefreshableState<StockDetailWidget> {
void _removeStockDialog() {
// TODO: In future, deprecate support for the older API
if (InvenTreeAPI().supportModernStockTransactions()) {
if (InvenTreeAPI().supportsModernStockTransactions) {
Map<String, dynamic> fields = {
"pk": {
"parent": "items",
@ -463,7 +463,7 @@ class _StockItemDisplayState extends RefreshableState<StockDetailWidget> {
Future <void> _countStockDialog() async {
// TODO: In future, deprecate support for older API
if (InvenTreeAPI().supportModernStockTransactions()) {
if (InvenTreeAPI().supportsModernStockTransactions) {
Map<String, dynamic> fields = {
"pk": {
@ -566,7 +566,7 @@ class _StockItemDisplayState extends RefreshableState<StockDetailWidget> {
Future <void> _transferStockDialog(BuildContext context) async {
// TODO: In future, deprecate support for older API
if (InvenTreeAPI().supportModernStockTransactions()) {
if (InvenTreeAPI().supportsModernStockTransactions) {
Map<String, dynamic> fields = {
"pk": {

View File

@ -5,6 +5,7 @@
import "package:test/test.dart";
import "package:inventree/api.dart";
import "package:inventree/helpers.dart";
import "package:inventree/user_profile.dart";
@ -91,12 +92,13 @@ void main() {
assert(!result);
// TODO: Test that the connection attempt above throws an authentication error
assert(!api.checkConnection());
} else {
assert(false);
}
});
test("Login Success", () async {
@ -107,12 +109,34 @@ void main() {
final bool result = await api.connectToServer();
// Check expected values
expect(result, equals(true));
expect(api.hasToken, equals(true));
assert(result);
assert(api.hasToken);
expect(api.baseUrl, equals("http://localhost:12345/"));
expect(api.isConnected(), equals(true));
expect(api.isConnecting(), equals(false));
assert(api.isConnected());
assert(!api.isConnecting());
assert(api.checkConnection());
});
test("Version Checks", () async {
// Test server version information
var api = InvenTreeAPI();
assert(await api.connectToServer());
// Check supported functions
assert(api.apiVersion >= 50);
assert(api.supportsSettings);
assert(api.supportsNotifications);
assert(api.supportsModernStockTransactions);
assert(api.supportsPoReceive);
// Check available permissions
assert(api.checkPermission("part", "change"));
assert(api.checkPermission("stocklocation", "delete"));
assert(api.checkPermission("part", "weirdpermission"));
assert(api.checkPermission("blah", "bloo"));
});
});
}