mirror of
https://gitlab.com/fabinfra/fabaccess/fabaccess-api-cs.git
synced 2025-04-20 18:36:28 +02:00
Test Traits
This commit is contained in:
parent
35b4e952f8
commit
f2480f22d0
@ -6,6 +6,10 @@
|
|||||||
<Nullable>enable</Nullable>
|
<Nullable>enable</Nullable>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<UpToDateCheckInput Remove="schema/traits.capnp" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="CapnpC.CSharp.MsBuild.Generation" Version="1.3.118" />
|
<PackageReference Include="CapnpC.CSharp.MsBuild.Generation" Version="1.3.118" />
|
||||||
<PackageReference Include="NLog" Version="5.2.8" />
|
<PackageReference Include="NLog" Version="5.2.8" />
|
||||||
|
@ -1 +1 @@
|
|||||||
Subproject commit 158d307d74a8e82d5b7c9f4de1afcb180cc6eceb
|
Subproject commit 9d7c66b9dd5d5245f21cb14c5d09de99954951e7
|
101
FabAccessAPI_Test/API_SpecTests/ResourceTest.cs
Normal file
101
FabAccessAPI_Test/API_SpecTests/ResourceTest.cs
Normal file
@ -0,0 +1,101 @@
|
|||||||
|
using FabAccessAPI;
|
||||||
|
using FabAccessAPI.Schema;
|
||||||
|
using NLog.Time;
|
||||||
|
using NUnit.Framework;
|
||||||
|
|
||||||
|
namespace FabAccessAPI_Test;
|
||||||
|
|
||||||
|
[TestFixture]
|
||||||
|
public class ResourceTest
|
||||||
|
{
|
||||||
|
[Test(Description="TestID: 00001")]
|
||||||
|
[TestCase("UserA", "MachineA")]
|
||||||
|
public async Task Claim(string username, string resourcename)
|
||||||
|
{
|
||||||
|
API api = new API();
|
||||||
|
ConnectionData connectionData = TestEnv.CreateConnetionData(username);
|
||||||
|
await api.Connect(connectionData).ConfigureAwait(false);
|
||||||
|
|
||||||
|
Resource resource = await api.Session.Resources.GetByName(resourcename).ConfigureAwait(false);
|
||||||
|
Fallible<IClaim, Claimable.IClaimError> result = await resource.Claim.Claim().ConfigureAwait(false);
|
||||||
|
|
||||||
|
// TODO: Claim Error State in Case of Success
|
||||||
|
|
||||||
|
IClaim claim = result.Ok;
|
||||||
|
|
||||||
|
// TODO: Change State
|
||||||
|
|
||||||
|
await claim.Disown().ConfigureAwait(false);
|
||||||
|
|
||||||
|
await api.Disconnect().ConfigureAwait(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
[TestCase("UserA", "fabaccess://test.fab-access.space/resources/MachineA")]
|
||||||
|
public async Task GetByUrl(string username, string resourceURN)
|
||||||
|
{
|
||||||
|
API api = new API();
|
||||||
|
ConnectionData connectionData = TestEnv.CreateConnetionData(username);
|
||||||
|
await api.Connect(connectionData).ConfigureAwait(false);
|
||||||
|
|
||||||
|
Resource resource = await api.Session.Resources.GetByUrl(resourceURL).ConfigureAwait(false);
|
||||||
|
|
||||||
|
Assert.That(resource, Is.Not.Null);
|
||||||
|
|
||||||
|
await api.Disconnect().ConfigureAwait(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
[TestCase("UserA", "urn:fabaccess:resource:MachineA")]
|
||||||
|
public async Task GetByUrn(string username, string resourceURN)
|
||||||
|
{
|
||||||
|
API api = new API();
|
||||||
|
ConnectionData connectionData = TestEnv.CreateConnetionData(username);
|
||||||
|
await api.Connect(connectionData);
|
||||||
|
|
||||||
|
Resource resource = await api.Session.Resources.GetByUrn(resourceURN).ConfigureAwait(false);
|
||||||
|
|
||||||
|
await api.Disconnect().ConfigureAwait(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
[TestCase("UserA")]
|
||||||
|
public async Task List(string username)
|
||||||
|
{
|
||||||
|
API api = new API();
|
||||||
|
ConnectionData connectionData = TestEnv.CreateConnetionData(username);
|
||||||
|
await api.Connect(connectionData).ConfigureAwait(false);
|
||||||
|
|
||||||
|
IReadOnlyList<Resource> result = await api.Session.Resources.List().ConfigureAwait(false);
|
||||||
|
|
||||||
|
await api.Disconnect().ConfigureAwait(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
[TestCase("UserA")]
|
||||||
|
public async Task Claimed(string username)
|
||||||
|
{
|
||||||
|
API api = new API();
|
||||||
|
ConnectionData connectionData = TestEnv.CreateConnetionData(username);
|
||||||
|
await api.Connect(connectionData).ConfigureAwait(false);
|
||||||
|
|
||||||
|
IReadOnlyList<IClaim> result = await api.Session.Resources.Claimed().ConfigureAwait(false);
|
||||||
|
|
||||||
|
await api.Disconnect().ConfigureAwait(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
[TestCase("UserA", "MachineA")]
|
||||||
|
public async Task ClaimedListCheck(string username, string resourcename)
|
||||||
|
{
|
||||||
|
API api = new API();
|
||||||
|
ConnectionData connectionData = TestEnv.CreateConnetionData(username);
|
||||||
|
await api.Connect(connectionData).ConfigureAwait(false);
|
||||||
|
|
||||||
|
IReadOnlyList<IClaim> result1 = await api.Session.Resources.Claimed().ConfigureAwait(false);
|
||||||
|
Assert.That(result1.Count, Is.Zero);
|
||||||
|
|
||||||
|
Resource machineA = await api.Session.Resources.GetByName(resourcename).ConfigureAwait(false);
|
||||||
|
IClaim claim = (await machineA.Claim.Claim().ConfigureAwait(false)).Ok;
|
||||||
|
|
||||||
|
IReadOnlyList<IClaim> result2 = await api.Session.Resources.Claimed().ConfigureAwait(false);
|
||||||
|
Assert.That(result2.Count, Is.Not.Zero);
|
||||||
|
|
||||||
|
await api.Disconnect().ConfigureAwait(false);
|
||||||
|
}
|
||||||
|
}
|
128
usecase.md
128
usecase.md
@ -6,15 +6,15 @@ Use Cases
|
|||||||
+ UserA - generischer User
|
+ UserA - generischer User
|
||||||
+ UserB - generischer User mit gleichen Rollen wir UserA
|
+ UserB - generischer User mit gleichen Rollen wir UserA
|
||||||
+ UserC - generischer User ohne Rollen
|
+ UserC - generischer User ohne Rollen
|
||||||
+ MaschineA - frei zugängliche Resource mit festem Ort und Stromanschluss
|
+ MachineA - frei zugängliche Resource mit festem Ort und Stromanschluss
|
||||||
+ TerminalA - NFC Reader bei MaschineA, welche nur MaschinA nutzen kann
|
+ TerminalA - NFC Reader bei MachineA, welche nur MaschinA nutzen kann
|
||||||
+ RolleB - Rolle mit Berechtigungen MaschineB zu nutzen
|
+ RolleB - Rolle mit Berechtigungen MachineB zu nutzen
|
||||||
+ MaschineB - beschränkt zugängliche Resource mit festem Ort und Stromanschluss
|
+ MachineB - beschränkt zugängliche Resource mit festem Ort und Stromanschluss
|
||||||
+ TerminalB - NFC Reader bei MaschineA, welche nur MaschineB mit PIN nutzen kann
|
+ TerminalB - NFC Reader bei MachineA, welche nur MachineB mit PIN nutzen kann
|
||||||
+ TerminalB - NFC Reader bei MaschineA, welche nur MaschinB mit PIN nutzen kann
|
+ TerminalB - NFC Reader bei MachineA, welche nur MaschinB mit PIN nutzen kann
|
||||||
+ MaschineC - frei zugängliche Resource mit festem Ort und Stromanschluss, benötigt MaschineD zum funktionieren
|
+ MachineC - frei zugängliche Resource mit festem Ort und Stromanschluss, benötigt MachineD zum funktionieren
|
||||||
+ MaschineD - Maschine mit welche von MaschineC gebraucht wird
|
+ MachineD - Maschine mit welche von MachineC gebraucht wird
|
||||||
+ MaschineE - Maschine, welche von meheren Nutzer gleichzeitig verwendet werden kann
|
+ MachineE - Maschine, welche von meheren Nutzer gleichzeitig verwendet werden kann
|
||||||
+ ManagerA - User mit Berechtigung zum Verwalten von Usern und Vergeben von Berechtigungen
|
+ ManagerA - User mit Berechtigung zum Verwalten von Usern und Vergeben von Berechtigungen
|
||||||
+ UserB
|
+ UserB
|
||||||
+ CardA - FabFireCard von UserA
|
+ CardA - FabFireCard von UserA
|
||||||
@ -60,55 +60,55 @@ Borepin holt ein Token für die zukünftige Anmeldung des Gerätes
|
|||||||
*User0 kann nun Resourcen ausleihen*
|
*User0 kann nun Resourcen ausleihen*
|
||||||
|
|
||||||
## Rollenvergabe
|
## Rollenvergabe
|
||||||
*UserA möchte MaschineB verwenden können*
|
*UserA möchte MachineB verwenden können*
|
||||||
|
|
||||||
UserA geht zu ManagerA und erhält eine Einweisung für MaschineB
|
UserA geht zu ManagerA und erhält eine Einweisung für MachineB
|
||||||
ManagerA öffnet Borepin, wird automatisch angemeldet und
|
ManagerA öffnet Borepin, wird automatisch angemeldet und
|
||||||
+ öffnet die Nutzerverwaltung
|
+ öffnet die Nutzerverwaltung
|
||||||
+ wählt UserA aus
|
+ wählt UserA aus
|
||||||
+ fügt UserA RolleB zu
|
+ fügt UserA RolleB zu
|
||||||
|
|
||||||
*UserA kann nun Borepin öffnen, wird automatisch angemeldet und kann MaschineB nutzten*
|
*UserA kann nun Borepin öffnen, wird automatisch angemeldet und kann MachineB nutzten*
|
||||||
|
|
||||||
## Claim
|
## Claim - TestID:00001
|
||||||
*UserA steht vor MaschineA und möchte diese verwenden*
|
*UserA steht vor MachineA und möchte diese verwenden*
|
||||||
|
|
||||||
UserA öffnet Borepin, wird automatisch angemeldet und
|
UserA öffnet Borepin, wird automatisch angemeldet und
|
||||||
+ wählt MaschineA in einer Liste aus / scannt den QR-Code von MaschineA / scannt den NTAG von MaschineA
|
+ wählt MachineA in einer Liste aus / scannt den QR-Code von MachineA / scannt den NTAG von MachineA
|
||||||
+ leiht MaschineA aus
|
+ leiht MachineA aus
|
||||||
+ schaltet den Strom von MaschineA frei
|
+ schaltet den Strom von MachineA frei
|
||||||
+ verwendet MaschineA
|
+ verwendet MachineA
|
||||||
+ gibt MaschineA zurück, Strom wird gesperrt vom BFFH
|
+ gibt MachineA zurück, Strom wird gesperrt vom BFFH
|
||||||
|
|
||||||
*UserA hat MaschineA verwendet*
|
*UserA hat MachineA verwendet*
|
||||||
|
|
||||||
## Transfer
|
## Transfer
|
||||||
*UserA möchte UserB die MaschineB übergeben*
|
*UserA möchte UserB die MachineB übergeben*
|
||||||
|
|
||||||
UserA hatte MaschineB ausgeliehen, öffnet Borepin, wird automatisch angemeldet und
|
UserA hatte MachineB ausgeliehen, öffnet Borepin, wird automatisch angemeldet und
|
||||||
+ wählt MaschineA in einer Liste aus / scannt den QR-Code von MaschineA / scannt den NTAG von MaschineA
|
+ wählt MachineA in einer Liste aus / scannt den QR-Code von MachineA / scannt den NTAG von MachineA
|
||||||
+ generiet ein Transfer QR-Code / emuliert eine Transfer NTAG
|
+ generiet ein Transfer QR-Code / emuliert eine Transfer NTAG
|
||||||
|
|
||||||
UserB öffnet Borepin, wird automatisch angemeldet und
|
UserB öffnet Borepin, wird automatisch angemeldet und
|
||||||
+ scannt Transfer QR-Code / scannt Transfer NTAG
|
+ scannt Transfer QR-Code / scannt Transfer NTAG
|
||||||
|
|
||||||
*UserB kann nun MaschineB verwenden, ohne das der Zustand der Maschine sich verändet hat*
|
*UserB kann nun MachineB verwenden, ohne das der Zustand der Maschine sich verändet hat*
|
||||||
|
|
||||||
## Lend/Instruct
|
## Lend/Instruct
|
||||||
*UserA möchte UserC an MaschineB ausbilden*
|
*UserA möchte UserC an MachineB ausbilden*
|
||||||
|
|
||||||
UserA hatte MaschineB ausgeliehen, öffnet Borepin, wird automatisch angemeldet und
|
UserA hatte MachineB ausgeliehen, öffnet Borepin, wird automatisch angemeldet und
|
||||||
+ wählt MaschineA in einer Liste aus / scannt den QR-Code von MaschineA / scannt den NTAG von MaschineA
|
+ wählt MachineA in einer Liste aus / scannt den QR-Code von MachineA / scannt den NTAG von MachineA
|
||||||
+ generiet ein Lend QR-Code / emuliert eine Lend NTAG
|
+ generiet ein Lend QR-Code / emuliert eine Lend NTAG
|
||||||
|
|
||||||
UserC öffnet Borepin, wird automatisch angemeldet und
|
UserC öffnet Borepin, wird automatisch angemeldet und
|
||||||
+ scannt Lend QR-Code / scannt Lend NTAG
|
+ scannt Lend QR-Code / scannt Lend NTAG
|
||||||
+ verwendet MaschineB
|
+ verwendet MachineB
|
||||||
+ gibt MaschineB zurück
|
+ gibt MachineB zurück
|
||||||
|
|
||||||
UserA erhält MaschineB zurück, prüft MaschineB, gibt MaschineB zurück
|
UserA erhält MachineB zurück, prüft MachineB, gibt MachineB zurück
|
||||||
|
|
||||||
*UserC hat MaschineB verwendet, unter Verantwortung von UserA*
|
*UserC hat MachineB verwendet, unter Verantwortung von UserA*
|
||||||
|
|
||||||
## FabFireCard Erzeugung
|
## FabFireCard Erzeugung
|
||||||
*UserA geht zu ManagerA und möchte ein FabFireCard erhalten*
|
*UserA geht zu ManagerA und möchte ein FabFireCard erhalten*
|
||||||
@ -160,25 +160,25 @@ __Gleiches Verhalten wie bei Accounterzeugung__
|
|||||||
*UserA hat sein Passwort zurückgesetzt*
|
*UserA hat sein Passwort zurückgesetzt*
|
||||||
|
|
||||||
## Terminalnutzung
|
## Terminalnutzung
|
||||||
*UserA möchte MaschineA mit CardA ausleihen*
|
*UserA möchte MachineA mit CardA ausleihen*
|
||||||
|
|
||||||
UserA steht vor TerminalA und
|
UserA steht vor TerminalA und
|
||||||
+ hält CardA auf den NFC Reader
|
+ hält CardA auf den NFC Reader
|
||||||
|
|
||||||
TerminalA meldet sich bei BFFH und
|
TerminalA meldet sich bei BFFH und
|
||||||
+ leiht MaschineA für UserA aus
|
+ leiht MachineA für UserA aus
|
||||||
+ schaltet den Strom frei
|
+ schaltet den Strom frei
|
||||||
|
|
||||||
UserA steht vor TerminalA und
|
UserA steht vor TerminalA und
|
||||||
+ gibt auf TerminalA ein, MaschineA zurückgeben
|
+ gibt auf TerminalA ein, MachineA zurückgeben
|
||||||
|
|
||||||
oder UserA öffnet Borepin, wird automatisch angemeldet und
|
oder UserA öffnet Borepin, wird automatisch angemeldet und
|
||||||
+ gibt MaschinA zurück
|
+ gibt MaschinA zurück
|
||||||
|
|
||||||
*UserA hat MaschineA mit CardA ausgeliehen und verwendet*
|
*UserA hat MachineA mit CardA ausgeliehen und verwendet*
|
||||||
|
|
||||||
## Terminalnutzung mit PIN
|
## Terminalnutzung mit PIN
|
||||||
*UserA möchte MaschineB mit CardA ausleihen*
|
*UserA möchte MachineB mit CardA ausleihen*
|
||||||
|
|
||||||
UserA steht vor TerminalB und
|
UserA steht vor TerminalB und
|
||||||
+ hält CardA auf den NFC Reader
|
+ hält CardA auf den NFC Reader
|
||||||
@ -186,20 +186,20 @@ UserA steht vor TerminalB und
|
|||||||
+ tippt PIN ein
|
+ tippt PIN ein
|
||||||
|
|
||||||
TerminalB meldet sich bei BFFH und
|
TerminalB meldet sich bei BFFH und
|
||||||
+ leiht MaschineB für UserA aus
|
+ leiht MachineB für UserA aus
|
||||||
+ schaltet den Strom frei
|
+ schaltet den Strom frei
|
||||||
__Gleiches Verhalten wie bei Accounterzeugung__
|
__Gleiches Verhalten wie bei Accounterzeugung__
|
||||||
|
|
||||||
*UserA hat MaschineA mit CardA ausgeliehen und verwendet*
|
*UserA hat MachineA mit CardA ausgeliehen und verwendet*
|
||||||
|
|
||||||
## Reservieren
|
## Reservieren
|
||||||
*UserA möchte für morgen MaschineA reservieren*
|
*UserA möchte für morgen MachineA reservieren*
|
||||||
|
|
||||||
UserA öffnet Borepin, wird automatisch angemeldet und
|
UserA öffnet Borepin, wird automatisch angemeldet und
|
||||||
+ wählt MaschineA aus Liste aus
|
+ wählt MachineA aus Liste aus
|
||||||
+ geht auf reservieren und trägt ein Zeitraum ein
|
+ geht auf reservieren und trägt ein Zeitraum ein
|
||||||
|
|
||||||
-> UserA erhält zum Begin der Reservierung automatisch den Claim für die MaschineA, wenn dieser verfügbar ist
|
-> UserA erhält zum Begin der Reservierung automatisch den Claim für die MachineA, wenn dieser verfügbar ist
|
||||||
|
|
||||||
oder
|
oder
|
||||||
|
|
||||||
@ -208,55 +208,55 @@ oder
|
|||||||
UserA geht zu ManagerA und bittet ihn die Maschine freizugeben
|
UserA geht zu ManagerA und bittet ihn die Maschine freizugeben
|
||||||
|
|
||||||
ManagerA öffnet Borepin, wird automatisch angemeldet und
|
ManagerA öffnet Borepin, wird automatisch angemeldet und
|
||||||
+ wählt MaschineA aus Liste aus
|
+ wählt MachineA aus Liste aus
|
||||||
+ entfernt den Claim
|
+ entfernt den Claim
|
||||||
|
|
||||||
-> UserA erhält automatisch den Claim für MaschineA
|
-> UserA erhält automatisch den Claim für MachineA
|
||||||
*UserA kann MaschineA im Reservierungszeitraum nutzen*
|
*UserA kann MachineA im Reservierungszeitraum nutzen*
|
||||||
|
|
||||||
## Queuing
|
## Queuing
|
||||||
*UserB verwendet gerade MaschineA und UserA möchte als nächster an MaschineA*
|
*UserB verwendet gerade MachineA und UserA möchte als nächster an MachineA*
|
||||||
UserA öffnet Borepin, wird automatisch angemeldet und
|
UserA öffnet Borepin, wird automatisch angemeldet und
|
||||||
+ wählt MaschineA aus Liste aus
|
+ wählt MachineA aus Liste aus
|
||||||
+ geht auf queuing
|
+ geht auf queuing
|
||||||
|
|
||||||
UserB gibt MaschineA zurück
|
UserB gibt MachineA zurück
|
||||||
-> UserA erhält automatisch ein Claim auf MaschineA
|
-> UserA erhält automatisch ein Claim auf MachineA
|
||||||
*UserA kann direkt nach UserB MaschineA nutzen*
|
*UserA kann direkt nach UserB MachineA nutzen*
|
||||||
|
|
||||||
## Intereset/Reservierung/Queuing aufhebn
|
## Intereset/Reservierung/Queuing aufhebn
|
||||||
*UserA hat einen Interest auf MaschineA*
|
*UserA hat einen Interest auf MachineA*
|
||||||
UserA öffnet Borepin, wird automatisch angemeldet und
|
UserA öffnet Borepin, wird automatisch angemeldet und
|
||||||
+ wählt MaschineA aus Liste aus
|
+ wählt MachineA aus Liste aus
|
||||||
+ beendet Interest
|
+ beendet Interest
|
||||||
|
|
||||||
*UserA hat jetzt keinen Interest auf MaschineA*
|
*UserA hat jetzt keinen Interest auf MachineA*
|
||||||
|
|
||||||
## Benachrichten
|
## Benachrichten
|
||||||
*UserA möchte wissen wann die MaschineA frei ist*
|
*UserA möchte wissen wann die MachineA frei ist*
|
||||||
UserA öffnet Borepin, wird automatisch angemeldet und
|
UserA öffnet Borepin, wird automatisch angemeldet und
|
||||||
+ wählt MaschineA aus Liste aus
|
+ wählt MachineA aus Liste aus
|
||||||
+ aktiviert Benachrichtigungen für MaschineA (mit Optionen, um welchen State es geht)
|
+ aktiviert Benachrichtigungen für MachineA (mit Optionen, um welchen State es geht)
|
||||||
|
|
||||||
-> BFFH benachrichtigt UserA, dass die MaschineA frei ist
|
-> BFFH benachrichtigt UserA, dass die MachineA frei ist
|
||||||
-> Noftiy wird wieder gelöscht
|
-> Noftiy wird wieder gelöscht
|
||||||
|
|
||||||
oder
|
oder
|
||||||
|
|
||||||
-> BFFH benachrichtigt UserA, dass die MaschineA frei ist
|
-> BFFH benachrichtigt UserA, dass die MachineA frei ist
|
||||||
UserA öffnet Borepin, wird automatisch angemeldet und
|
UserA öffnet Borepin, wird automatisch angemeldet und
|
||||||
+ wählt MaschineA aus Liste aus
|
+ wählt MachineA aus Liste aus
|
||||||
+ deaktiviert Benachrichtigungen für MaschineA
|
+ deaktiviert Benachrichtigungen für MachineA
|
||||||
|
|
||||||
*UserA wurde über Änderungen von MaschineA benachrichtigt*
|
*UserA wurde über Änderungen von MachineA benachrichtigt*
|
||||||
|
|
||||||
## Abhängige Maschinen
|
## Abhängige Maschinen
|
||||||
*UserA möchte MaschineC ausleihen*
|
*UserA möchte MachineC ausleihen*
|
||||||
|
|
||||||
serA öffnet Borepin, wird automatisch angemeldet und
|
serA öffnet Borepin, wird automatisch angemeldet und
|
||||||
+ wählt MaschineA aus Liste aus
|
+ wählt MachineA aus Liste aus
|
||||||
+ claimed MaschineA
|
+ claimed MachineA
|
||||||
-> MaschineD wird von BFFH geclaimed
|
-> MachineD wird von BFFH geclaimed
|
||||||
|
|
||||||
## Kaputte Maschine melden
|
## Kaputte Maschine melden
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user