Test Traits

This commit is contained in:
TheJoKlLa 2024-03-30 19:21:10 +01:00
parent 35b4e952f8
commit f2480f22d0
4 changed files with 170 additions and 65 deletions

View File

@ -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

View 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);
}
}

View File

@ -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