Codebasis als Dateien ins Arbeitsrepo statt als Gitlink

QuellCode/CentronERP war nur als Gitlink (Submodul-Referenz auf 79c1142)
getrackt, ohne .gitmodules und ohne erreichbares Remote. Der
Untersuchungsgegenstand der Versuchsreihe war damit nicht reproduzierbar
gesichert: Ein Klon haette ein leeres Verzeichnis erhalten, und die Belege
der 3.287 Anforderungen waeren nicht ueberpruefbar gewesen.

Umstellung:
- Historie nach c:\DEV\CentronERP_git_snapshot_79c1142 ausgelagert
  (vollstaendig lesbar, enthaelt 79c1142 und Vorgaenger 89ccfd6)
- Gitlink aus dem Index entfernt
- Dateiinhalt aufgenommen: 24.557 Dateien, rund 333 MB

Die verschachtelte .gitignore der Codebasis gilt weiter, Build-Artefakte
bleiben ausgeschlossen. Details in Versuche/Versuch_01/_Codebasis-Nachweis.md
This commit is contained in:
Christoph Schwörer
2026-08-26 07:43:51 +02:00
parent 18edae75b6
commit f045b99a25
24664 changed files with 5846716 additions and 1 deletions
@@ -0,0 +1,818 @@
[
{
AlternativeNames: [],
Description: null,
Group: 'Allgemein',
Name: '@@HeutigesDatum@@'
},
{
AlternativeNames: [
'@@Nummer@@'
],
Description: null,
Group: 'Helpdesk',
Name: '@@RequestNummer@@'
},
{
AlternativeNames: [],
Description: null,
Group: 'Helpdesk',
Name: '@@RequestI3D@@'
},
{
AlternativeNames: [],
Description: null,
Group: 'Helpdesk',
Name: '@@ProblemKurztext@@'
},
{
AlternativeNames: [],
Description: null,
Group: 'Helpdesk',
Name: '@@ProblemBeschreibung@@'
},
{
AlternativeNames: [],
Description: null,
Group: 'Helpdesk',
Name: '@@InterneNotiz@@'
},
{
AlternativeNames: [],
Description: null,
Group: 'Helpdesk',
Name: '@@Status@@'
},
{
AlternativeNames: [],
Description: null,
Group: 'Helpdesk',
Name: '@@Prioritaet@@'
},
{
AlternativeNames: [
'@@ErstellDatum@@'
],
Description: null,
Group: 'Helpdesk',
Name: '@@AnnahmeDatum@@'
},
{
AlternativeNames: [
'@@ErstellZeit@@'
],
Description: null,
Group: 'Helpdesk',
Name: '@@AnnahmeZeit@@'
},
{
AlternativeNames: [],
Description: null,
Group: 'Helpdesk',
Name: '@@AbschlussDatum@@'
},
{
AlternativeNames: [],
Description: null,
Group: 'Helpdesk',
Name: '@@AbschlussZeit@@'
},
{
AlternativeNames: [
'@@Freitext1@@'
],
Description: null,
Group: 'Helpdesk',
Name: '@@Zusatz1@@'
},
{
AlternativeNames: [
'@@Freitext2@@'
],
Description: null,
Group: 'Helpdesk',
Name: '@@Zusatz2@@'
},
{
AlternativeNames: [
'@@FaelligkeitDatum@@'
],
Description: 'Das Datum des Fälligkeit-Feldes',
Group: 'Helpdesk',
Name: '@@Faelligkeit@@'
},
{
AlternativeNames: [],
Description: 'Die Uhrzeit des Fälligkeit-Feldes',
Group: 'Helpdesk',
Name: '@@FaelligkeitZeit@@'
},
{
AlternativeNames: [],
Description: null,
Group: 'Helpdesk',
Name: '@@GeplanteDauer@@'
},
{
AlternativeNames: [
'@@VonDatum@@'
],
Description: 'Das Datum des Von-Feldes',
Group: 'Helpdesk',
Name: '@@Von@@'
},
{
AlternativeNames: [],
Description: 'Die Uhrzeit des Von-Feldes',
Group: 'Helpdesk',
Name: '@@VonZeit@@'
},
{
AlternativeNames: [
'@@BisDatum@@'
],
Description: 'Das Datum des Bis-Feldes',
Group: 'Helpdesk',
Name: '@@Bis@@'
},
{
AlternativeNames: [],
Description: 'Die Uhrzeit des Bis-Feldes',
Group: 'Helpdesk',
Name: '@@BisZeit@@'
},
{
AlternativeNames: [],
Description: 'Zum direkten Öffnen des Tickets in ServiceBoard',
Group: 'Helpdesk',
Name: '@@SB-Link@@'
},
{
AlternativeNames: [],
Description: 'Zum direkten Öffnen des Tickets in ServiceBoard-Online',
Group: 'Helpdesk',
Name: '@@SBO-Link@@'
},
{
AlternativeNames: [
'@@Nexus-Link@@'
],
Description: 'Zum direkten Öffnen des Tickets in Nexus - für Mitarbeiter',
Group: 'Helpdesk',
Name: '@@NexusUser-Link@@'
},
{
AlternativeNames: [],
Description: 'Zum direkten Öffnen des Tickets in Nexus - für WebAccounts',
Group: 'Helpdesk',
Name: '@@NexusWebAccount-Link@@'
},
{
AlternativeNames: [],
Description: null,
Group: 'Eingeloggter Nutzer',
Name: '@@BearbeiterName@@'
},
{
AlternativeNames: [],
Description: null,
Group: 'Eingeloggter Nutzer',
Name: '@@BearbeiterKurzzeichen@@'
},
{
AlternativeNames: [],
Description: null,
Group: 'Eingeloggter Nutzer',
Name: '@@BearbeiterVorname@@'
},
{
AlternativeNames: [],
Description: null,
Group: 'Eingeloggter Nutzer',
Name: '@@BearbeiterNachname@@'
},
{
AlternativeNames: [],
Description: null,
Group: 'Eingeloggter Nutzer',
Name: '@@BearbeiterTelefon@@'
},
{
AlternativeNames: [],
Description: null,
Group: 'Eingeloggter Nutzer',
Name: '@@BearbeiterEMail@@'
},
{
AlternativeNames: [],
Description: null,
Group: 'Verantwortlicher',
Name: '@@VerantwortlicherName@@'
},
{
AlternativeNames: [],
Description: null,
Group: 'Verantwortlicher',
Name: '@@VerantwortlicherKurzzeichen@@'
},
{
AlternativeNames: [],
Description: null,
Group: 'Verantwortlicher',
Name: '@@VerantwortlicherVorname@@'
},
{
AlternativeNames: [],
Description: null,
Group: 'Verantwortlicher',
Name: '@@VerantwortlicherNachname@@'
},
{
AlternativeNames: [],
Description: null,
Group: 'Verantwortlicher',
Name: '@@VerantwortlicherTelefon@@'
},
{
AlternativeNames: [],
Description: null,
Group: 'Verantwortlicher',
Name: '@@VerantwortlicherEMail@@'
},
{
AlternativeNames: [
'@@KdNummer@@'
],
Description: null,
Group: 'Kunde',
Name: '@@KundenNummer@@'
},
{
AlternativeNames: [
'@@Matchcode@@'
],
Description: null,
Group: 'Kunde',
Name: '@@KundenMatchcode@@'
},
{
AlternativeNames: [
'@@Kundenname@@',
'@@KdName@@'
],
Description: null,
Group: 'Kunde',
Name: '@@KundenName@@'
},
{
AlternativeNames: [
'@@KdTel@@'
],
Description: null,
Group: 'Kunde',
Name: '@@KundenTelefon@@'
},
{
AlternativeNames: [
'@@KdFax@@'
],
Description: null,
Group: 'Kunde',
Name: '@@KundenFax@@'
},
{
AlternativeNames: [
'@@KdEMail@@'
],
Description: null,
Group: 'Kunde',
Name: '@@KundenEmail@@'
},
{
AlternativeNames: [
'@@KdWWW@@'
],
Description: null,
Group: 'Kunde',
Name: '@@KundenWebsite@@'
},
{
AlternativeNames: [],
Description: null,
Group: 'Kunde',
Name: '@@VertriebsgebietKurz@@'
},
{
AlternativeNames: [],
Description: null,
Group: 'Kunde',
Name: '@@VertriebsgebietLang@@'
},
{
AlternativeNames: [],
Description: null,
Group: 'Adresse',
Name: '@@AnschriftI3D@@'
},
{
AlternativeNames: [],
Description: null,
Group: 'Adresse',
Name: '@@AnschriftStandard@@'
},
{
AlternativeNames: [],
Description: null,
Group: 'Adresse',
Name: '@@AnschriftStatus@@'
},
{
AlternativeNames: [],
Description: null,
Group: 'Adresse',
Name: '@@AnschriftAbteilung@@'
},
{
AlternativeNames: [
'@@KdPLZ@@'
],
Description: null,
Group: 'Adresse',
Name: '@@AnschriftPLZ@@'
},
{
AlternativeNames: [
'@@KdOrt@@'
],
Description: null,
Group: 'Adresse',
Name: '@@AnschriftOrt@@'
},
{
AlternativeNames: [
'@@KdStrasse@@'
],
Description: null,
Group: 'Adresse',
Name: '@@AnschriftStrasse@@'
},
{
AlternativeNames: [
'@@KdLand@@'
],
Description: null,
Group: 'Adresse',
Name: '@@AnschriftLand@@'
},
{
AlternativeNames: [
'@@KdPostfach@@'
],
Description: null,
Group: 'Adresse',
Name: '@@KundenPostfach@@'
},
{
AlternativeNames: [
'@@KdPostfachAktiv@@'
],
Description: null,
Group: 'Adresse',
Name: '@@KundenPostfachAktiv@@'
},
{
AlternativeNames: [
'@@AnsprechI3D@@'
],
Description: null,
Group: 'Ansprechpartner',
Name: '@@AnsprechpartnerI3D@@'
},
{
AlternativeNames: [
'@@AnsprechStandard@@'
],
Description: null,
Group: 'Ansprechpartner',
Name: '@@AnsprechpartnerStandard@@'
},
{
AlternativeNames: [
'@@AnsprechStatus@@'
],
Description: null,
Group: 'Ansprechpartner',
Name: '@@AnsprechpartnerStatus@@'
},
{
AlternativeNames: [
'@@AnsprechAnrede@@',
'@@AnsprechTitel@@'
],
Description: null,
Group: 'Ansprechpartner',
Name: '@@AnsprechpartnerAnrede@@'
},
{
AlternativeNames: [
'@@AnsprechAbteilung@@'
],
Description: null,
Group: 'Ansprechpartner',
Name: '@@AnsprechpartnerAbteilung@@'
},
{
AlternativeNames: [
'@@AnsprechBeruf@@'
],
Description: null,
Group: 'Ansprechpartner',
Name: '@@AnsprechpartnerBeruf@@'
},
{
AlternativeNames: [
'@@AnsprechNachname@@'
],
Description: null,
Group: 'Ansprechpartner',
Name: '@@AnsprechpartnerName@@'
},
{
AlternativeNames: [
'@@AnsprechVorname@@'
],
Description: null,
Group: 'Ansprechpartner',
Name: '@@AnsprechpartnerVorname@@'
},
{
AlternativeNames: [
'@@AnsprechStandardBriefanrede@@'
],
Description: null,
Group: 'Ansprechpartner',
Name: '@@AnsprechpartnerBriefanrede@@'
},
{
AlternativeNames: [
'@@AnsprechTel@@'
],
Description: null,
Group: 'Ansprechpartner',
Name: '@@AnsprechpartnerTelefon@@'
},
{
AlternativeNames: [
'@@AnsprechFax@@'
],
Description: null,
Group: 'Ansprechpartner',
Name: '@@AnsprechpartnerFax@@'
},
{
AlternativeNames: [],
Description: null,
Group: 'Ansprechpartner',
Name: '@@AnsprechpartnerEMail@@'
},
{
AlternativeNames: [
'@@AnsprechEMailGeschaeft@@'
],
Description: null,
Group: 'Ansprechpartner',
Name: '@@AnsprechpartnerEMailGeschaeft@@'
},
{
AlternativeNames: [
'@@AnsprechEMailPrivat@@'
],
Description: null,
Group: 'Ansprechpartner',
Name: '@@AnsprechpartnerEMailPrivat@@'
},
{
AlternativeNames: [
'@@AnsprechGeburtsdatum@@'
],
Description: null,
Group: 'Ansprechpartner',
Name: '@@AnsprechpartnerGeburtsdatum@@'
},
{
AlternativeNames: [
'@@AnsprechMobil@@'
],
Description: null,
Group: 'Ansprechpartner',
Name: '@@AnsprechpartnerMobil@@'
},
{
AlternativeNames: [],
Description: 'Vor- und Nachname Betreuer1 (konfiguriert: IDM)',
Group: 'Kunde',
Name: '@@Betreuer1Name@@'
},
{
AlternativeNames: [
'@@IDMVorname@@'
],
Description: 'Vorname Betreuer1 (konfiguriert: IDM)',
Group: 'Kunde',
Name: '@@Betreuer1Vorname@@'
},
{
AlternativeNames: [
'@@IDMNachname@@'
],
Description: 'Nachname Betreuer1 (konfiguriert: IDM)',
Group: 'Kunde',
Name: '@@Betreuer1Nachname@@'
},
{
AlternativeNames: [],
Description: 'Kurzzeichen Betreuer1 (konfiguriert: IDM)',
Group: 'Kunde',
Name: '@@Betreuer1Kurzzeichen@@'
},
{
AlternativeNames: [
'@@IDMTelefon@@'
],
Description: 'Telefon Betreuer1 (konfiguriert: IDM)',
Group: 'Kunde',
Name: '@@Betreuer1Telefon@@'
},
{
AlternativeNames: [
'@@IDMFax@@'
],
Description: 'Fax Betreuer1 (konfiguriert: IDM)',
Group: 'Kunde',
Name: '@@Betreuer1Fax@@'
},
{
AlternativeNames: [
'@@IDMEMail@@'
],
Description: 'E-Mail Betreuer1 (konfiguriert: IDM)',
Group: 'Kunde',
Name: '@@Betreuer1EMail@@'
},
{
AlternativeNames: [],
Description: 'Vor- und Nachname Betreuer2 (konfiguriert: ADM)',
Group: 'Kunde',
Name: '@@Betreuer2Name@@'
},
{
AlternativeNames: [
'@@ADMVorname@@'
],
Description: 'Vorname Betreuer2 (konfiguriert: ADM)',
Group: 'Kunde',
Name: '@@Betreuer2Vorname@@'
},
{
AlternativeNames: [
'@@ADMNachname@@'
],
Description: 'Nachname Betreuer2 (konfiguriert: ADM)',
Group: 'Kunde',
Name: '@@Betreuer2Nachname@@'
},
{
AlternativeNames: [],
Description: 'Kurzzeichen Betreuer2 (konfiguriert: ADM)',
Group: 'Kunde',
Name: '@@Betreuer2Kurzzeichen@@'
},
{
AlternativeNames: [
'@@ADMTelefon@@'
],
Description: 'Telefon Betreuer2 (konfiguriert: ADM)',
Group: 'Kunde',
Name: '@@Betreuer2Telefon@@'
},
{
AlternativeNames: [
'@@ADMFax@@'
],
Description: 'Fax Betreuer2 (konfiguriert: ADM)',
Group: 'Kunde',
Name: '@@Betreuer2Fax@@'
},
{
AlternativeNames: [
'@@ADMEMail@@'
],
Description: 'E-Mail Betreuer2 (konfiguriert: ADM)',
Group: 'Kunde',
Name: '@@Betreuer2EMail@@'
},
{
AlternativeNames: [],
Description: 'Vor- und Nachname Betreuer3 (konfiguriert: Service1)',
Group: 'Kunde',
Name: '@@Betreuer3Name@@'
},
{
AlternativeNames: [],
Description: 'Vorname Betreuer3 (konfiguriert: Service1)',
Group: 'Kunde',
Name: '@@Betreuer3Vorname@@'
},
{
AlternativeNames: [],
Description: 'Nachname Betreuer3 (konfiguriert: Service1)',
Group: 'Kunde',
Name: '@@Betreuer3Nachname@@'
},
{
AlternativeNames: [],
Description: 'Kurzzeichen Betreuer3 (konfiguriert: Service1)',
Group: 'Kunde',
Name: '@@Betreuer3Kurzzeichen@@'
},
{
AlternativeNames: [],
Description: 'Telefon Betreuer3 (konfiguriert: Service1)',
Group: 'Kunde',
Name: '@@Betreuer3Telefon@@'
},
{
AlternativeNames: [],
Description: 'Fax Betreuer3 (konfiguriert: Service1)',
Group: 'Kunde',
Name: '@@Betreuer3Fax@@'
},
{
AlternativeNames: [],
Description: 'E-Mail Betreuer3 (konfiguriert: Service1)',
Group: 'Kunde',
Name: '@@Betreuer3EMail@@'
},
{
AlternativeNames: [],
Description: 'Vor- und Nachname Betreuer4 (konfiguriert: Service2)',
Group: 'Kunde',
Name: '@@Betreuer4Name@@'
},
{
AlternativeNames: [],
Description: 'Vorname Betreuer4 (konfiguriert: Service2)',
Group: 'Kunde',
Name: '@@Betreuer4Vorname@@'
},
{
AlternativeNames: [],
Description: 'Nachname Betreuer4 (konfiguriert: Service2)',
Group: 'Kunde',
Name: '@@Betreuer4Nachname@@'
},
{
AlternativeNames: [],
Description: 'Kurzzeichen Betreuer4 (konfiguriert: Service2)',
Group: 'Kunde',
Name: '@@Betreuer4Kurzzeichen@@'
},
{
AlternativeNames: [],
Description: 'Telefon Betreuer4 (konfiguriert: Service2)',
Group: 'Kunde',
Name: '@@Betreuer4Telefon@@'
},
{
AlternativeNames: [],
Description: 'Fax Betreuer4 (konfiguriert: Service2)',
Group: 'Kunde',
Name: '@@Betreuer4Fax@@'
},
{
AlternativeNames: [],
Description: 'E-Mail Betreuer4 (konfiguriert: Service2)',
Group: 'Kunde',
Name: '@@Betreuer4EMail@@'
},
{
AlternativeNames: [],
Description: 'Vor- und Nachname Betreuer5 (konfiguriert: Entwickler)',
Group: 'Kunde',
Name: '@@Betreuer5Name@@'
},
{
AlternativeNames: [],
Description: 'Vorname Betreuer5 (konfiguriert: Entwickler)',
Group: 'Kunde',
Name: '@@Betreuer5Vorname@@'
},
{
AlternativeNames: [],
Description: 'Nachname Betreuer5 (konfiguriert: Entwickler)',
Group: 'Kunde',
Name: '@@Betreuer5Nachname@@'
},
{
AlternativeNames: [],
Description: 'Kurzzeichen Betreuer5 (konfiguriert: Entwickler)',
Group: 'Kunde',
Name: '@@Betreuer5Kurzzeichen@@'
},
{
AlternativeNames: [],
Description: 'Telefon Betreuer5 (konfiguriert: Entwickler)',
Group: 'Kunde',
Name: '@@Betreuer5Telefon@@'
},
{
AlternativeNames: [],
Description: 'Fax Betreuer5 (konfiguriert: Entwickler)',
Group: 'Kunde',
Name: '@@Betreuer5Fax@@'
},
{
AlternativeNames: [],
Description: 'E-Mail Betreuer5 (konfiguriert: Entwickler)',
Group: 'Kunde',
Name: '@@Betreuer5EMail@@'
},
{
AlternativeNames: [],
Description: 'Vor- und Nachname Betreuer6 (konfiguriert: Betreuer)',
Group: 'Kunde',
Name: '@@Betreuer6Name@@'
},
{
AlternativeNames: [],
Description: 'Vorname Betreuer6 (konfiguriert: Betreuer)',
Group: 'Kunde',
Name: '@@Betreuer6Vorname@@'
},
{
AlternativeNames: [],
Description: 'Nachname Betreuer6 (konfiguriert: Betreuer)',
Group: 'Kunde',
Name: '@@Betreuer6Nachname@@'
},
{
AlternativeNames: [],
Description: 'Kurzzeichen Betreuer6 (konfiguriert: Betreuer)',
Group: 'Kunde',
Name: '@@Betreuer6Kurzzeichen@@'
},
{
AlternativeNames: [],
Description: 'Telefon Betreuer6 (konfiguriert: Betreuer)',
Group: 'Kunde',
Name: '@@Betreuer6Telefon@@'
},
{
AlternativeNames: [],
Description: 'Fax Betreuer6 (konfiguriert: Betreuer)',
Group: 'Kunde',
Name: '@@Betreuer6Fax@@'
},
{
AlternativeNames: [],
Description: 'E-Mail Betreuer6 (konfiguriert: Betreuer)',
Group: 'Kunde',
Name: '@@Betreuer6EMail@@'
},
{
AlternativeNames: [],
Description: 'Name aller Ticket-Bearbeiter, kommasepariert',
Group: 'Ticket-Bearbeiter',
Name: '@@TicketBearbeiterName@@'
},
{
AlternativeNames: [],
Description: 'Vorname aller Ticket-Bearbeiter, kommasepariert',
Group: 'Ticket-Bearbeiter',
Name: '@@TicketBearbeiterVorname@@'
},
{
AlternativeNames: [],
Description: 'Nachname aller Ticket-Bearbeiter, kommasepariert',
Group: 'Ticket-Bearbeiter',
Name: '@@TicketBearbeiterNachname@@'
},
{
AlternativeNames: [],
Description: 'Kurzzeichen aller Ticket-Bearbeiter, kommasepariert',
Group: 'Ticket-Bearbeiter',
Name: '@@TicketBearbeiterKurzzeichen@@'
},
{
AlternativeNames: [],
Description: 'E-Mail aller Ticket-Bearbeiter, kommasepariert',
Group: 'Ticket-Bearbeiter',
Name: '@@TicketBearbeiterEMail@@'
},
{
AlternativeNames: [],
Description: 'Telefon aller Ticket-Bearbeiter, kommasepariert',
Group: 'Ticket-Bearbeiter',
Name: '@@TicketBearbeiterTelefon@@'
}
]
@@ -0,0 +1,149 @@
using System.Collections.Generic;
using System.Linq;
using Centron.BusinessLogic.Sales.Support;
using Centron.DAO;
using Centron.Data.Entities.CustomerArea.Support;
using Centron.Tests.EndToEnd.Infrastructure;
using Xunit;
using Xunit.Abstractions;
namespace Centron.Tests.EndToEnd.TicketTests.Ticket165605;
/// <summary>
/// Ticket 165605: mail-template variables for helpdesk mails.
/// - Group "Kunde": uniform Betreuer1-6 variables (instead of only IDM).
/// IDM/ADM are kept as hidden alternatives (backward compatibility).
/// - New group "Ticket-Bearbeiter": comma-separated variables across all editors.
/// </summary>
public class Ticket165605Tests : EndToEndTest
{
public Ticket165605Tests(ITestOutputHelper testOutputHelper)
: base(testOutputHelper)
{
}
public override void Execute()
{
this.VerifyAvailableVariables();
this.VerifyVariableCatalog();
this.VerifyEditorVariablesAreCommaSeparated();
this.VerifyEditorsResolveWhenTicketLoadedWithoutPreloadedEditors();
}
// Regression: in the forwarding/mail flow the ticket is loaded via GetHelpdesk(), which does
// NOT populate the (unmapped) Editors collection. The TicketBearbeiter variables must still
// resolve the editors (loaded from the DB on demand).
private void VerifyEditorsResolveWhenTicketLoadedWithoutPreloadedEditors()
{
var helpdeskI3D = this.Sql<int>(
"SELECT ISNULL((SELECT TOP 1 TicketI3D FROM cvw_TicketEditors WHERE LTRIM(RTRIM(ISNULL(EmployeeFullName, ''))) <> '' ORDER BY TicketI3D), 0)");
// The snapshot must contain at least one ticket with editors; otherwise this regression
// would pass without ever exercising the on-demand load path -> fail loudly instead.
Assert.True(helpdeskI3D > 0, "No ticket with editors found in the snapshot database.");
using var session = new DAOSession();
// GetHelpdesk does NOT populate Editors -> reproduces the reported bug.
var helpdesk = new HelpdeskBL(session).GetHelpdesk(helpdeskI3D);
Assert.NotNull(helpdesk);
Assert.True(helpdesk.Editors == null || helpdesk.Editors.Count == 0);
var result = new HelpdeskReplacementBL(session).ReplaceVariablesInText("@@TicketBearbeiterName@@", helpdesk, null);
Assert.False(string.IsNullOrWhiteSpace(result));
}
// Full variable catalog as a snapshot (regression across all groups).
private void VerifyVariableCatalog()
{
using var session = new DAOSession();
var variables = new HelpdeskReplacementBL(session).GetAvailableVariables();
this.Verifier.Verify("AvailableVariables", variables);
}
// GetAvailableVariables returns the names including the "@@...@@" delimiters.
private static string V(string name) => $"@@{name}@@";
private void VerifyAvailableVariables()
{
using var session = new DAOSession();
var variables = new HelpdeskReplacementBL(session).GetAvailableVariables();
var names = variables.Select(f => f.Name).ToHashSet();
// All Betreuer 1-6 present uniformly, 7 fields each (Name, Vorname, Nachname,
// Kurzzeichen, Telefon, Fax, EMail).
foreach (var prefix in new[] { "Betreuer1", "Betreuer2", "Betreuer3", "Betreuer4", "Betreuer5", "Betreuer6" })
{
foreach (var suffix in new[] { "Name", "Vorname", "Nachname", "Kurzzeichen", "Telefon", "Fax", "EMail" })
{
Assert.Contains(V(prefix + suffix), names);
}
// Group assignment "Kunde"
Assert.Equal("Kunde", variables.Single(f => f.Name == V(prefix + "Vorname")).Group);
// The new "Name" and "Kurzzeichen" fields have no legacy alternative name.
Assert.Empty(variables.Single(f => f.Name == V(prefix + "Name")).AlternativeNames);
Assert.Empty(variables.Single(f => f.Name == V(prefix + "Kurzzeichen")).AlternativeNames);
}
// There are no IDM*/ADM* variables for the new fields (Name/Kurzzeichen are new).
Assert.DoesNotContain(V("IDMName"), names);
Assert.DoesNotContain(V("ADMName"), names);
Assert.DoesNotContain(V("IDMKurzzeichen"), names);
Assert.DoesNotContain(V("ADMKurzzeichen"), names);
// New ticket-editor variables present, in their own group.
foreach (var suffix in new[] { "Name", "Vorname", "Nachname", "Kurzzeichen", "EMail", "Telefon" })
{
Assert.Contains(V("TicketBearbeiter" + suffix), names);
}
Assert.Equal("Ticket-Bearbeiter", variables.Single(f => f.Name == V("TicketBearbeiterName")).Group);
// Legacy IDM/ADM names no longer appear in the selection ...
Assert.DoesNotContain(V("IDMVorname"), names);
Assert.DoesNotContain(V("ADMVorname"), names);
// ... but still work as hidden alternatives (backward compatibility).
Assert.Contains(V("IDMVorname"), variables.Single(f => f.Name == V("Betreuer1Vorname")).AlternativeNames);
Assert.Contains(V("IDMEMail"), variables.Single(f => f.Name == V("Betreuer1EMail")).AlternativeNames);
Assert.Contains(V("ADMVorname"), variables.Single(f => f.Name == V("Betreuer2Vorname")).AlternativeNames);
}
private void VerifyEditorVariablesAreCommaSeparated()
{
using var session = new DAOSession();
var helpdesk = new Helpdesk
{
Editors = new List<HelpdeskEditor>
{
new()
{
EmployeeFullName = "Anna Mueller",
EmployeeFirstName = "Anna",
EmployeeLastName = "Mueller",
EmployeeShortSign = "MUA",
EmployeeEMail = "anna.mueller@example.com"
},
new()
{
EmployeeFullName = "Felix Kroos",
EmployeeFirstName = "Felix",
EmployeeLastName = "Kroos",
EmployeeShortSign = "KRF",
EmployeeEMail = "felix.kroos@example.com"
}
}
};
var bl = new HelpdeskReplacementBL(session);
Assert.Equal("Anna Mueller, Felix Kroos", bl.ReplaceVariablesInText("@@TicketBearbeiterName@@", helpdesk, null));
Assert.Equal("Anna, Felix", bl.ReplaceVariablesInText("@@TicketBearbeiterVorname@@", helpdesk, null));
Assert.Equal("MUA, KRF", bl.ReplaceVariablesInText("@@TicketBearbeiterKurzzeichen@@", helpdesk, null));
Assert.Equal("anna.mueller@example.com, felix.kroos@example.com", bl.ReplaceVariablesInText("@@TicketBearbeiterEMail@@", helpdesk, null));
}
}