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>
</PropertyGroup>
<ItemGroup>
<UpToDateCheckInput Remove="schema/traits.capnp" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="CapnpC.CSharp.MsBuild.Generation" Version="1.3.118" />
<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
+ UserB - generischer User mit gleichen Rollen wir UserA
+ UserC - generischer User ohne Rollen
+ MaschineA - frei zugängliche Resource mit festem Ort und Stromanschluss
+ TerminalA - NFC Reader bei MaschineA, welche nur MaschinA nutzen kann
+ RolleB - Rolle mit Berechtigungen MaschineB zu nutzen
+ MaschineB - 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 MaschineA, welche nur MaschinB mit PIN nutzen kann
+ MaschineC - frei zugängliche Resource mit festem Ort und Stromanschluss, benötigt MaschineD zum funktionieren
+ MaschineD - Maschine mit welche von MaschineC gebraucht wird
+ MaschineE - Maschine, welche von meheren Nutzer gleichzeitig verwendet werden kann
+ MachineA - frei zugängliche Resource mit festem Ort und Stromanschluss
+ TerminalA - NFC Reader bei MachineA, welche nur MaschinA nutzen kann
+ RolleB - Rolle mit Berechtigungen MachineB zu nutzen
+ MachineB - beschränkt zugängliche Resource mit festem Ort und Stromanschluss
+ TerminalB - NFC Reader bei MachineA, welche nur MachineB mit PIN nutzen kann
+ TerminalB - NFC Reader bei MachineA, welche nur MaschinB mit PIN nutzen kann
+ MachineC - frei zugängliche Resource mit festem Ort und Stromanschluss, benötigt MachineD zum funktionieren
+ MachineD - Maschine mit welche von MachineC gebraucht wird
+ MachineE - Maschine, welche von meheren Nutzer gleichzeitig verwendet werden kann
+ ManagerA - User mit Berechtigung zum Verwalten von Usern und Vergeben von Berechtigungen
+ UserB
+ 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*
## 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
+ öffnet die Nutzerverwaltung
+ wählt UserA aus
+ 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
*UserA steht vor MaschineA und möchte diese verwenden*
## Claim - TestID:00001
*UserA steht vor MachineA und möchte diese verwenden*
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
+ leiht MaschineA aus
+ schaltet den Strom von MaschineA frei
+ verwendet MaschineA
+ gibt MaschineA zurück, Strom wird gesperrt vom BFFH
+ wählt MachineA in einer Liste aus / scannt den QR-Code von MachineA / scannt den NTAG von MachineA
+ leiht MachineA aus
+ schaltet den Strom von MachineA frei
+ verwendet MachineA
+ gibt MachineA zurück, Strom wird gesperrt vom BFFH
*UserA hat MaschineA verwendet*
*UserA hat MachineA verwendet*
## 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
+ wählt MaschineA in einer Liste aus / scannt den QR-Code von MaschineA / scannt den NTAG von MaschineA
UserA hatte MachineB ausgeliehen, öffnet Borepin, wird automatisch angemeldet und
+ 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
UserB öffnet Borepin, wird automatisch angemeldet und
+ 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
*UserA möchte UserC an MaschineB ausbilden*
*UserA möchte UserC an MachineB ausbilden*
UserA hatte MaschineB 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
UserA hatte MachineB ausgeliehen, öffnet Borepin, wird automatisch angemeldet und
+ 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
UserC öffnet Borepin, wird automatisch angemeldet und
+ scannt Lend QR-Code / scannt Lend NTAG
+ verwendet MaschineB
+ gibt MaschineB zurück
+ verwendet MachineB
+ 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
*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*
## Terminalnutzung
*UserA möchte MaschineA mit CardA ausleihen*
*UserA möchte MachineA mit CardA ausleihen*
UserA steht vor TerminalA und
+ hält CardA auf den NFC Reader
TerminalA meldet sich bei BFFH und
+ leiht MaschineA für UserA aus
+ leiht MachineA für UserA aus
+ schaltet den Strom frei
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
+ gibt MaschinA zurück
*UserA hat MaschineA mit CardA ausgeliehen und verwendet*
*UserA hat MachineA mit CardA ausgeliehen und verwendet*
## Terminalnutzung mit PIN
*UserA möchte MaschineB mit CardA ausleihen*
*UserA möchte MachineB mit CardA ausleihen*
UserA steht vor TerminalB und
+ hält CardA auf den NFC Reader
@ -186,20 +186,20 @@ UserA steht vor TerminalB und
+ tippt PIN ein
TerminalB meldet sich bei BFFH und
+ leiht MaschineB für UserA aus
+ leiht MachineB für UserA aus
+ schaltet den Strom frei
__Gleiches Verhalten wie bei Accounterzeugung__
*UserA hat MaschineA mit CardA ausgeliehen und verwendet*
*UserA hat MachineA mit CardA ausgeliehen und verwendet*
## Reservieren
*UserA möchte für morgen MaschineA reservieren*
*UserA möchte für morgen MachineA reservieren*
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
-> 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
@ -208,55 +208,55 @@ oder
UserA geht zu ManagerA und bittet ihn die Maschine freizugeben
ManagerA öffnet Borepin, wird automatisch angemeldet und
+ wählt MaschineA aus Liste aus
+ wählt MachineA aus Liste aus
+ entfernt den Claim
-> UserA erhält automatisch den Claim für MaschineA
*UserA kann MaschineA im Reservierungszeitraum nutzen*
-> UserA erhält automatisch den Claim für MachineA
*UserA kann MachineA im Reservierungszeitraum nutzen*
## 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
+ wählt MaschineA aus Liste aus
+ wählt MachineA aus Liste aus
+ geht auf queuing
UserB gibt MaschineA zurück
-> UserA erhält automatisch ein Claim auf MaschineA
*UserA kann direkt nach UserB MaschineA nutzen*
UserB gibt MachineA zurück
-> UserA erhält automatisch ein Claim auf MachineA
*UserA kann direkt nach UserB MachineA nutzen*
## Intereset/Reservierung/Queuing aufhebn
*UserA hat einen Interest auf MaschineA*
*UserA hat einen Interest auf MachineA*
UserA öffnet Borepin, wird automatisch angemeldet und
+ wählt MaschineA aus Liste aus
+ wählt MachineA aus Liste aus
+ beendet Interest
*UserA hat jetzt keinen Interest auf MaschineA*
*UserA hat jetzt keinen Interest auf MachineA*
## 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
+ wählt MaschineA aus Liste aus
+ aktiviert Benachrichtigungen für MaschineA (mit Optionen, um welchen State es geht)
+ wählt MachineA aus Liste aus
+ 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
oder
-> BFFH benachrichtigt UserA, dass die MaschineA frei ist
-> BFFH benachrichtigt UserA, dass die MachineA frei ist
UserA öffnet Borepin, wird automatisch angemeldet und
+ wählt MaschineA aus Liste aus
+ deaktiviert Benachrichtigungen für MaschineA
+ wählt MachineA aus Liste aus
+ deaktiviert Benachrichtigungen für MachineA
*UserA wurde über Änderungen von MaschineA benachrichtigt*
*UserA wurde über Änderungen von MachineA benachrichtigt*
## Abhängige Maschinen
*UserA möchte MaschineC ausleihen*
*UserA möchte MachineC ausleihen*
serA öffnet Borepin, wird automatisch angemeldet und
+ wählt MaschineA aus Liste aus
+ claimed MaschineA
-> MaschineD wird von BFFH geclaimed
+ wählt MachineA aus Liste aus
+ claimed MachineA
-> MachineD wird von BFFH geclaimed
## Kaputte Maschine melden