mirror of
https://gitlab.com/fabinfra/fabaccess/fabaccess-api-cs.git
synced 2025-04-19 01:46:30 +02:00
Test Traits
This commit is contained in:
parent
35b4e952f8
commit
f2480f22d0
@ -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
|
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
|
||||
+ 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
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user