Sonar-Token in Jenkinsfile angepasst ExcludeFromCodeCoverage für Methode "GenerateVorgang"

This commit is contained in:
dev-mkoebis
2026-04-23 14:46:13 +02:00
parent b5873b0a8d
commit d3deb79cc6
30 changed files with 4039 additions and 12 deletions

View File

@@ -0,0 +1,23 @@
using System;
using System.IO;
using System.Text;
using Xunit;
using Hochbaustatistik.Business;
using System.Collections.Generic;
using Hochbaustatistik.Database;
using System.Reflection;
namespace Hochbaustatistik.Testing
{
public class DatabaseOperationsTests
{
[Fact (Skip ="Keine Datenbank-Verbindung m<>glich")]
public void ConnectAndExecuteHochbauTest()
{
DatabaseOperations.conString = "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=dborap04.stadtdo.de)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=bgvp.stadtdo.de)));user id=leser;password=leser;";
var result = DatabaseOperations.ConnectAndExecuteHochbau(new Vorgang() { Aktenzeichen = "63/2-1-020989" });
Assert.NotNull(result);
}
}
}

View File

@@ -0,0 +1,57 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Net.Mail;
using Domino;
using Xunit;
namespace Hochbaustatistik.Testing
{
public class EmailTests
{
[Theory(Skip = "Kein Lotus Notes installiert")]
[InlineData(@"C:\TEMP\test.txt")]
public void SenMailTest(string attachment)
{
Assert.True(SendEmail(attachment));
}
private static bool SendEmail(string attachment)
{
try
{
NotesSession nSession = new NotesSession();
nSession.Initialize("Mk130881");
NotesDatabase nDatabase = nSession.GetDatabase("DOMMAIL4/SRV/Stadt Dortmund/DE", "MAIL\\mkoebis-riedel");
NotesDocument nDocument = nDatabase.CreateDocument();
//Attachment
var richTextItem = nDocument.CreateRichTextItem("files");
richTextItem.EmbedObject(EMBED_TYPE.EMBED_ATTACHMENT, "", attachment, "attachment");
string[] recipients = { "mkoebis-riedel@stadtdo.de, katyes@gmx.li" };
string txtMessage = "Sehr geehrte Damen und Herren,\r\n\r\nanbei erhalten Sie die Auswertung zur Hochbaustatistik für das Jahr " + DateTime.Today.Year + ".\r\n\r\nBitte senden Sie jene ausgefüllt zurück an: mkoebis-riedel@stadtdo.de\r\n\r\nDanke und freundliche Grüße";
nDocument.ReplaceItemValue("Form", "Memo");
nDocument.ReplaceItemValue("SentTo", recipients);
nDocument.ReplaceItemValue("Subject", "Hochbaustatistik Auswertung IT.NRW");
nDocument.ReplaceItemValue("Body", txtMessage); //set body text
nDocument.SaveMessageOnSend = true;
nDocument.Send(false, recipients);
return true;
}
catch (Exception ex)
{
Debug.WriteLine(ex.Message);
return false;
}
}
}
}

View File

@@ -4,19 +4,45 @@
<TargetFramework>netcoreapp3.1</TargetFramework>
<IsPackable>false</IsPackable>
<Platforms>AnyCPU;x86</Platforms>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.1.0" />
<PackageReference Include="xunit" Version="2.4.1" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.3">
<PackageReference Include="coverlet.collector" Version="3.2.0">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="coverlet.msbuild" Version="6.0.0">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.5.0" />
<PackageReference Include="Selenium.WebDriver" Version="4.8.2" />
<PackageReference Include="xunit" Version="2.4.2" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.5">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="coverlet.collector" Version="3.1.2">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
</PackageReference>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Hochbaustatistik\Hochbaustatistik.csproj" />
</ItemGroup>
<ItemGroup>
<None Update="TestData\Testdata.csv">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
</ItemGroup>
<ItemGroup>
<Reference Include="Interop.Domino">
<HintPath>Utilities\Interop.Domino.dll</HintPath>
</Reference>
<Reference Include="Interop.Microsoft.Office.Interop.Excel">
<HintPath>Utilities\Interop.Microsoft.Office.Interop.Excel.dll</HintPath>
</Reference>
</ItemGroup>
</Project>

View File

@@ -0,0 +1,33 @@
SELECT
INPROP.PMGTVVORGANG.VORGANGID,
INPROP.PMGTVVORGANG.VORGANGDEFID,
INPROP.PMGTVVORGANG.STRASSE1ID,
INPROP.PMGTVVORGANG.STRASSE1,
INPROP.PMGTVVORGANG.HAUSNUMMER1,
INPROP.PMGTVSACHBEARB.NAME,
INPROP.PMGTVVORGANG.VORGANGABGESCHL,
INPROP.PMGTVVORGANG.DATUMEINGANG,
INPROP.PMGTVVORGANGVAR.FLD_D_3 as Genehmigung,
INPROP.PMGTVVORGANGVAR.FLD_D_5 as Freigabe,
INPROP.PMGTVVORGANG.FLD_B_2 as Statistik_Relevant,
INPROP.PMGTVVORGANG.FLD_A_2 as Statistik1,
INPROP.PMGTVVORGANG.FLD_A_3 as Statistik2,
INPROP.PMGTVVORGANGVAR.FLD_D_10 as Genehmigung_gemeldet,
INPROP.PMGTVVORGANGVAR.FLD_D_11 as Fertigstellung_gemeldet,
INPROP.PMGTVVORGANGVAR.FLD_D_15 as Baubeginn,
INPROP.PMGTVVORGANGVAR.FLD_D_16 as Teilrohbauabnahme,
INPROP.PMGTVVORGANGVAR.FLD_D_17 as Rohbauabnahme,
INPROP.PMGTVVORGANGVAR.FLD_D_20 as Schlussabnahme,
INPROP.PMGTVVORGANG.FLD_A_20 as Vorjahr,
INPROP.PMGTVVORGANGVAR.FLD_C_2 as Bauüberhang_Vorjahr,
INPROP.PMGTVVORGANG.AKTENSTANDORT
FROM INPROP.PMGTVVORGANG
INNER JOIN INPROP.PMGTVVORGANGVAR ON INPROP.PMGTVVORGANG.VORGANGID = INPROP.PMGTVVORGANGVAR.VORGANGID
AND INPROP.PMGTVVORGANG.VORGANGID = INPROP.PMGTVVORGANGVAR.VORGANGID
INNER JOIN INPROP.PMVBCHECKLIST ON INPROP.PMGTVVORGANG.CHECKID = INPROP.PMVBCHECKLIST.CHECKLISTID
INNER JOIN INPROP.PMGTVSACHBEARB ON INPROP.PMGTVVORGANG.ANWENDER = INPROP.PMGTVSACHBEARB.USERID
WHERE INPROP.PMGTVVORGANG.STRASSE1='Dachsweg' AND INPROP.PMGTVVORGANG.HAUSNUMMER1='4'
AND INPROP.PMGTVVORGANG.VORGANGID
IN (SELECT INPROP.PMGTVVORGANG.VORGANGID FROM INPROP.PMGTVVORGANG
WHERE INPROP.PMGTVVORGANG.FLD_A_2 LIKE '576637%'
OR INPROP.PMGTVVORGANG.FLD_A_3 LIKE '576637%')

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,198 @@
using Hochbaustatistik.Business;
using Hochbaustatistik.Database;
using Hochbaustatistik.Utilities;
using OpenQA.Selenium.DevTools.V109.Target;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using Xunit;
namespace Hochbaustatistik.Testing.Utilities
{
public class DataOpsTest
{
public readonly VorgangInpro vorgang = new VorgangInpro() { Schlussabnahme = "2022" };
[Theory]
[InlineData("61/5-2-052875", "615-2-052875")]
public void IsValidTest(string trueAz, string falseAZ)
{
var instance = DataOpsSingleton.Instance;
Assert.True(instance.IsValid(trueAz));
Assert.False(instance.IsValid(falseAZ));
}
[Theory]
[InlineData("615-2-052875", "61/5-2-052870255", "61/5-4-050497/1", "6175-4-052875", "61/5-3-49044", "61/52052702", "Tiefe-Mark 20")]
public void CorrectAZTest(string az1, string az2, string az3, string az4, string az5, string az6, string az7)
{
var instance = DataOpsSingleton.Instance;
var expected1 = "61/5-2-052875";
var expected2 = "NOT_CORRECTED";
var expected3 = "61/5-4-050497";
var expected4 = "61/5-4-052875";
var expected5 = "61/5-3-049044";
var expected6 = "61/5-2-052702";
var expected7 = "NOT_CORRECTED";
Assert.Equal(expected1, instance.CorrectAZ(az1));
Assert.Equal(expected2, instance.CorrectAZ(az2));
Assert.Equal(expected3, instance.CorrectAZ(az3));
Assert.Equal(expected4, instance.CorrectAZ(az4));
Assert.Equal(expected5, instance.CorrectAZ(az5));
Assert.Equal(expected6, instance.CorrectAZ(az6));
Assert.Equal(expected7, instance.CorrectAZ(az7));
}
[Theory]
[InlineData("50001234567")]
public void ReshapeIdentifikatorTest(string ident)
{
var instance = DataOpsSingleton.Instance;
var expected = "1234567";
var actual = instance.ReshapeIdentifikator(ident);
Assert.Equal(expected, actual);
}
[Fact]
public void CreateItnrwRecordTest()
{
var instance = DataOpsSingleton.Instance;
List<VorgangItnrw> hochbauliste = new List<VorgangItnrw>();
hochbauliste.Add(new VorgangItnrw()
{
AGS = "913000",
Identifikator = "50005733064",
BauscheinNr = "61/5-2-43665",
MonatGenehmigung = "5",
JahrGenehmigung = "2017",
NameBauherr = " ",
Strasse = "Rüschenstr. 29",
PLZ = "44328",
Gemeinde = "Dortmund",
Gemeindeteil = " ",
Bauzustand = " ",
Bemerkungen = " "
});
var correctedAZ = "61/5-2-043665";
var origAZ = "61/5-2-43665";
var row = 57;
var hochbauListe = FileOperations.GenerateHochbauVorgangFromCSV(@"..\..\..\TestData\Testdata.csv");
var actual = instance.CreateItnrwRecord(row, correctedAZ, origAZ,hochbauListe);
var expected = String.Concat("913000;", "50005733064;", "61/5-2-043665;", "5;", "2017;", " ;", "Rüschenstr. 29;", "44328;", "Dortmund;", " ;");
Assert.Equal(expected, actual);
}
[Fact]
public void CreateStatusBauzustandTest()
{
var instance = DataOpsSingleton.Instance;
List<string> actuals = new List<string>();
List<VorgangInpro> inproVorgänge = new List<VorgangInpro>()
{
new VorgangInpro{ Schlussabnahme = "2022" },
new VorgangInpro { BaugenehmigungAusgeführt ="2022"}
};
foreach (var item in inproVorgänge)
{
actuals.Add(instance.CreateStatusBauzustand(item));
}
var expected1 = "F Fertigstellung erfolgte bis 31.12. des Vorjahres";
var expected2 = "4 Baugenehmigung erloschen";
Assert.Equal(expected1, actuals.ElementAt(0));
Assert.Equal(expected2, actuals.ElementAt(1));
}
[Fact(Skip = "Keine Datenbank-Verbindung möglich")]
public void MergeInproWithITNRWTest()
{
var resultFile = @"C:\TEMP\hochbaustatistik.csv";
DatabaseOperations.conString = "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=dborap04.stadtdo.de)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=bgvp.stadtdo.de)));user id=leser;password=leser;";
var instance = DataOpsSingleton.Instance;
List<VorgangItnrw> hochbauliste = new List<VorgangItnrw>();
hochbauliste.Add(new VorgangItnrw()
{
AGS = "913000",
Identifikator = "50005733064",
BauscheinNr = "61/5-2-43665",
MonatGenehmigung = "5",
JahrGenehmigung = "2017",
NameBauherr = " ",
Strasse = "Rüschenstr. 29",
PLZ = "44328",
Gemeinde = "Dortmund",
Gemeindeteil = " ",
Bauzustand = " ",
Bemerkungen = " "
});
instance.MergeInproWithITNRW(resultFile, hochbauliste);
Assert.True(File.Exists(resultFile));
var result = SearchEntry(resultFile, hochbauliste[0].PLZ);
Assert.True(result);
}
private bool SearchEntry(string file, string text)
{
bool found = false;
using (StreamReader sr = new StreamReader(file))
{
var fullText = sr.ReadToEnd();
found = fullText.Contains(text);
}
return found;
}
public static IEnumerable<object[]> Vorgänge()
{
var vorgänge = new List<VorgangInpro>
{
new VorgangInpro { Schlussabnahme = "2022" },
new VorgangInpro { Fertigstellung_Gemeldet = "2022" },
new VorgangInpro { BaugenehmigungAusgeführt = "2022"}
};
yield return new object[] { vorgänge };
}
public static IEnumerable<object[]> Hochbauliste()
{
var hochbauliste = new List<VorgangItnrw>
{
new VorgangItnrw {
AGS = "913000",
Identifikator = "50005733064",
BauscheinNr = "61/5-2-43665",
MonatGenehmigung = "5",
JahrGenehmigung = "2017",
NameBauherr = " ",
Strasse = "Rüschenstr. 29",
PLZ = "44328",
Gemeinde = "Dortmund",
Gemeindeteil = " ",
Bauzustand = " ",
Bemerkungen = " "}
};
yield return new object[] { hochbauliste };
}
}
}

View File

@@ -0,0 +1,27 @@
using System;
using System.IO;
using System.Linq;
using System.Text;
using Xunit;
using Hochbaustatistik.Business;
using Hochbaustatistik.Database;
using System.Collections.Generic;
using System.Text.RegularExpressions;
using System.Diagnostics;
using Hochbaustatistik.Utilities;
namespace Hochbaustatistik.Testing.Utilities
{
public class FileOperationsTests
{
List<VorgangItnrw> hochbauListe = new List<VorgangItnrw>();
readonly string filePath = @"..\..\..\TestData\Testdata.csv";
[Fact]
public void GenerateHochbauVorgangFromCSVTest()
{
hochbauListe = FileOperations.GenerateHochbauVorgangFromCSV(filePath);
Assert.True(hochbauListe.Count != 0);
}
}
}

Binary file not shown.

View File

@@ -0,0 +1,64 @@
using System;
using System.IO;
using System.Linq;
using System.Text;
using Xunit;
using Hochbaustatistik.Business;
using Hochbaustatistik.Database;
using System.Collections.Generic;
using System.Text.RegularExpressions;
using System.Diagnostics;
using System.Threading;
using OpenQA.Selenium;
using OpenQA.Selenium.Support.UI;
using OpenQA.Selenium.Edge;
using System.Net;
using System.Data;
namespace Hochbaustatistik.Testing
{
public class WebTesting
{
[Fact (Skip ="Derzeit keine Daten zum Download vorhanden")]
public void DownloadList()
{
//DownloadFolder
string pathUser = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile);
string pathDownloadedList = Path.Combine(pathUser, "Downloads", "BU-Liste_913000.csv");
//User: 0521442179
//Passwort: #Dortmund2022
IWebDriver driver = new EdgeDriver();
string loginUrl = "https://www.idev.nrw.de/";
driver.Navigate().GoToUrl(loginUrl);
IWebElement site = driver.FindElement(By.Id("05"));
site.Click();
site = driver.FindElement(By.Id("loginid"));
site.SendKeys("0521442179");
site = driver.FindElement(By.Id("password"));
site.SendKeys("#Dortmund2022");
site = driver.FindElement(By.Id("login"));
site.Click();
site = driver.FindElement(By.Id("menu100"));
site.Click();
site = driver.FindElement(By.LinkText("Bauüberhangsliste"));
site.Click();
Thread.Sleep(1500);
driver.Quit();
Assert.True(File.Exists(pathDownloadedList));
File.Delete(pathDownloadedList);
}
}
}