Continous Integration in der Praxis Gruppenarbeit
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

536 lines
17 KiB

  1. using MiniGames.Client.ViewModel;
  2. using MiniGames.Shared.Enums;
  3. using MiniGames.Shared.Models;
  4. using System.Collections.Generic;
  5. using System.Linq;
  6. using Xunit;
  7. namespace MiniGamesTests
  8. {
  9. public class UnoTest
  10. {
  11. public Uno UnoRegeln = new();
  12. public List<SpielerModel> SpielerModels = new();
  13. private KartenModel BeispielKarte(string name, string farbe, bool spezial)
  14. {
  15. var _name = name;
  16. var _farbe = farbe;
  17. var _spezial = spezial;
  18. KartenModel kartenModel = new()
  19. {
  20. Name = _name,
  21. Farbe = _farbe,
  22. Spezial = _spezial
  23. };
  24. return kartenModel;
  25. }
  26. private HandKartenModel BeispielHand()
  27. {
  28. HandKartenModel HandStapel = new()
  29. {
  30. SpielerModel = new()
  31. {
  32. Id = 1,
  33. SpielerName = "Andrej",
  34. },
  35. KartenModels = new()
  36. {
  37. new KartenModel
  38. {
  39. Name = Kartenbezeichnung.PlusZweiKarte.ToString(),
  40. Farbe = Farbe.Gelb.ToString(),
  41. Spezial = true
  42. }
  43. }
  44. };
  45. return HandStapel;
  46. }
  47. private void BeispielSpielerModelsFüllen(int id, string spielerName)
  48. {
  49. int _id = id;
  50. string _spielerName = spielerName;
  51. SpielerModels.Add(new SpielerModel()
  52. {
  53. Id = _id,
  54. SpielerName = _spielerName,
  55. Punkte = 0
  56. });
  57. }
  58. private void BeispielMultipleSpielerModelsFüllen(int anzahlSpieler)
  59. {
  60. switch (anzahlSpieler)
  61. {
  62. case 2:
  63. BeispielSpielerModelsFüllen(1, "Hans");
  64. BeispielSpielerModelsFüllen(2, "Peter");
  65. break;
  66. case 3:
  67. BeispielSpielerModelsFüllen(1, "Hans");
  68. BeispielSpielerModelsFüllen(2, "Peter");
  69. BeispielSpielerModelsFüllen(3, "Anna");
  70. break;
  71. case 4:
  72. BeispielSpielerModelsFüllen(1, "Hans");
  73. BeispielSpielerModelsFüllen(2, "Peter");
  74. BeispielSpielerModelsFüllen(3, "Anna");
  75. BeispielSpielerModelsFüllen(4, "Klaus");
  76. break;
  77. case 5:
  78. BeispielSpielerModelsFüllen(1, "Hans");
  79. BeispielSpielerModelsFüllen(2, "Peter");
  80. BeispielSpielerModelsFüllen(3, "Anna");
  81. BeispielSpielerModelsFüllen(4, "Klaus");
  82. BeispielSpielerModelsFüllen(5, "Brigitte");
  83. break;
  84. case 6:
  85. BeispielSpielerModelsFüllen(1, "Hans");
  86. BeispielSpielerModelsFüllen(2, "Peter");
  87. BeispielSpielerModelsFüllen(3, "Anna");
  88. BeispielSpielerModelsFüllen(4, "Klaus");
  89. BeispielSpielerModelsFüllen(5, "Brigitte");
  90. BeispielSpielerModelsFüllen(6, "Morty");
  91. break;
  92. default:
  93. break;
  94. }
  95. }
  96. private StapelModel BeispielStapelModelKarten(string name, string farbe, bool spezial)
  97. {
  98. var _name = name;
  99. var _farbe = farbe;
  100. var _spezial = spezial;
  101. StapelModel TestStapel = new();
  102. TestStapel.KartenModels = new()
  103. {
  104. new KartenModel
  105. {
  106. Name = _name,
  107. Farbe = _farbe,
  108. Spezial = _spezial
  109. },
  110. };
  111. return TestStapel;
  112. }
  113. #region UserManagement
  114. [Theory]
  115. [InlineData("Andrej", 1)]
  116. private void SpielerErstellenTest(string spielerName, int id)
  117. {
  118. //arrange
  119. var _spielerName = spielerName;
  120. var _id = id;
  121. //act
  122. UnoRegeln.SpielerErstellen(_spielerName);
  123. var ergebnis = UnoRegeln.Spieler;
  124. //assert
  125. Assert.Equal(_spielerName, ergebnis[0].SpielerModel.SpielerName);
  126. Assert.Equal(_id, ergebnis[0].SpielerModel.Id);
  127. }
  128. [Theory]
  129. [InlineData(2, 1)]
  130. [InlineData(3, 1)]
  131. [InlineData(4, 1)]
  132. [InlineData(5, 1)]
  133. [InlineData(6, 1)]
  134. [InlineData(7, 1)]
  135. [InlineData(8, 1)]
  136. private void MehrereSpielerErstellenTest(int anzahlSpieler, int id)
  137. {
  138. //arrange
  139. var _anzahlSpieler = anzahlSpieler;
  140. string[] _spielerName = new string[anzahlSpieler];
  141. var _id = id;
  142. //act
  143. for (int i = 0; i < _anzahlSpieler; i++)
  144. {
  145. _spielerName[i] = "Spieler" + i;
  146. UnoRegeln.SpielerErstellen(_spielerName[i]);
  147. }
  148. var ergebnis = UnoRegeln.Spieler;
  149. //assert
  150. for (int i = 0; i < _anzahlSpieler; i++)
  151. {
  152. Assert.Equal(_spielerName[i], ergebnis[i].SpielerModel.SpielerName);
  153. Assert.Equal(_id++, ergebnis[i].SpielerModel.Id);
  154. Assert.NotNull(ergebnis[i].KartenModels);
  155. }
  156. }
  157. [Theory]
  158. [InlineData(2)]
  159. [InlineData(3)]
  160. [InlineData(4)]
  161. [InlineData(5)]
  162. private void InitialeKartenVerteilungTest(int anzahlSpieler)
  163. {
  164. //arrange
  165. var _anzahlSpieler = anzahlSpieler;
  166. BeispielMultipleSpielerModelsFüllen(_anzahlSpieler);
  167. foreach (var spieler in SpielerModels)
  168. {
  169. UnoRegeln.SpielerErstellen(spieler.SpielerName);
  170. }
  171. UnoRegeln.ZiehKartenStapelZusammenstellen();
  172. //act
  173. UnoRegeln.InitialeKartenVerteilung();
  174. //assert
  175. foreach (var spieler in UnoRegeln.Spieler)
  176. {
  177. Assert.Equal(7, spieler.KartenModels.Count());
  178. }
  179. }
  180. [Theory]
  181. [InlineData(3, true, 2, 3)]
  182. [InlineData(3, true, 3, 1)]
  183. [InlineData(4, true, 1, 2)]
  184. [InlineData(4, true, 3, 4)]
  185. [InlineData(4, true, 4, 1)]
  186. [InlineData(6, true, 4, 5)]
  187. [InlineData(6, true, 5, 6)]
  188. [InlineData(3, false, 3, 2)]
  189. [InlineData(3, false, 1, 3)]
  190. [InlineData(4, false, 1, 4)]
  191. [InlineData(4, false, 4, 3)]
  192. [InlineData(6, false, 6, 5)]
  193. [InlineData(6, false, 4, 3)]
  194. private void NaechsterSpielerTest(int anzahlSpieler, bool uhrZeigerSinn, int aktuellerSpielerId, int naechsterErwartungId)
  195. {
  196. //arrange
  197. var _uhrZeigerSinn = uhrZeigerSinn;
  198. var _aktuellerSpielerId = aktuellerSpielerId;
  199. var _naechsterSpielerIdErwartung = naechsterErwartungId;
  200. //act
  201. for (int i = 0; i < anzahlSpieler; i++)
  202. {
  203. UnoRegeln.SpielerErstellen("Spieler " + i);
  204. }
  205. UnoRegeln.NaechsterSpielerWahl(_aktuellerSpielerId, _uhrZeigerSinn);
  206. //assert
  207. Assert.Equal(_naechsterSpielerIdErwartung, UnoRegeln.NaechsterSpielerId);
  208. }
  209. #endregion
  210. [Theory]
  211. [InlineData(Farbe.Rot, Farbe.Rot, true)]
  212. [InlineData(Farbe.Blau, Farbe.Rot, false)]
  213. [InlineData(Farbe.Rot, Farbe.Blau, false)]
  214. [InlineData(Farbe.Blau, Farbe.Blau, true)]
  215. [InlineData(Farbe.Gelb, Farbe.Rot, false)]
  216. [InlineData(Farbe.Gruen, Farbe.Gruen, true)]
  217. private void IstAblageStapelFarbeGleichZuLegendeKarteTest(Farbe ablegeStapelKarteFarbe, Farbe neueKarteFarbe, bool erwartet)
  218. {
  219. //arrange
  220. var _ablegeStabelKarteFarbe = ablegeStapelKarteFarbe.ToString();
  221. var _neueKarteFarbe = neueKarteFarbe.ToString();
  222. var _erwartet = erwartet;
  223. //act
  224. UnoRegeln.AblageKartenStapel.KartenModels = new();
  225. UnoRegeln.AblageKartenStapel.KartenModels.Add(
  226. BeispielKarte("Testkarten Name", _ablegeStabelKarteFarbe, false)
  227. );
  228. var erhalten = UnoRegeln.IstAblageStapelFarbeGleichZuLegendeKarte(_neueKarteFarbe);
  229. //assert
  230. Assert.Equal(_erwartet, erhalten);
  231. }
  232. [Theory]
  233. [InlineData(Kartenbezeichnung.Acht, Kartenbezeichnung.Acht, true)]
  234. [InlineData(Kartenbezeichnung.Eins, Kartenbezeichnung.Acht, false)]
  235. [InlineData(Kartenbezeichnung.Fuenf, Kartenbezeichnung.Vier, false)]
  236. [InlineData(Kartenbezeichnung.Sechs, Kartenbezeichnung.Sechs, true)]
  237. [InlineData(Kartenbezeichnung.Zwei, Kartenbezeichnung.Drei, false)]
  238. [InlineData(Kartenbezeichnung.Neun, Kartenbezeichnung.Acht, false)]
  239. private void IstAblageStapelZahlGleichZuLegendeKarteTest(Kartenbezeichnung ablegeStapelKarteBezeichnung, Kartenbezeichnung handStapelKarteBezeichnung, bool erwartet)
  240. {
  241. //arrange
  242. var _ablegeStapelKarteBezeichnung = ablegeStapelKarteBezeichnung.ToString();
  243. var _handStapelKarteBezeichnung = handStapelKarteBezeichnung.ToString();
  244. var _erwartet = erwartet;
  245. //act
  246. UnoRegeln.AblageKartenStapel.KartenModels = new();
  247. UnoRegeln.AblageKartenStapel.KartenModels.Add(
  248. BeispielKarte(_ablegeStapelKarteBezeichnung, Farbe.Blau.ToString(), false)
  249. );
  250. var erhalten = UnoRegeln.IstAblageStapelZahlGleichZuLegendeKarte(_handStapelKarteBezeichnung);
  251. //assert
  252. Assert.Equal(_erwartet, erhalten);
  253. }
  254. [Fact]
  255. private void ZiehEineKarteTest()
  256. {
  257. //arrange
  258. UnoRegeln.ZiehKartenStapelZusammenstellen();
  259. UnoRegeln.SpielerErstellen("Andrej");
  260. var erwartet = UnoRegeln.ZiehKartenStapel.KartenModels.FirstOrDefault();
  261. //act
  262. UnoRegeln.ZiehEineKarte(1);
  263. var erhalten = UnoRegeln.Spieler[0].KartenModels.LastOrDefault();
  264. //assert
  265. Assert.Equal(erwartet, erhalten);
  266. }
  267. [Theory]
  268. [InlineData(2, 0, 1)]
  269. [InlineData(3, 2, 0)]
  270. [InlineData(4, 2, 3)]
  271. [InlineData(5, 0, 1)]
  272. private void PlusZweiKarteAufStapelLegenTest(int anzahlSpieler, int aktuellerSpielerIndex, int naechsterSpielerIndex)
  273. {
  274. //arrange
  275. UnoRegeln.ZiehKartenStapelZusammenstellen();
  276. BeispielMultipleSpielerModelsFüllen(anzahlSpieler);
  277. foreach (var spieler in SpielerModels)
  278. {
  279. UnoRegeln.SpielerErstellen(spieler.SpielerName);
  280. }
  281. var _aktuellerSpielerIndex = aktuellerSpielerIndex;
  282. var _naechsterSpielerIndex = naechsterSpielerIndex;
  283. var nachstenSpielerKartenAnzahlErwartet = UnoRegeln.Spieler[_naechsterSpielerIndex].KartenModels.Count + 2;
  284. var beispielZuLegendeKarte = BeispielKarte(Kartenbezeichnung.PlusZweiKarte.ToString(), Farbe.Gelb.ToString(), true);
  285. //act
  286. UnoRegeln.KarteAufStapelLegen(UnoRegeln.Spieler[_aktuellerSpielerIndex].SpielerModel.Id, beispielZuLegendeKarte);
  287. //assert
  288. Assert.Equal(nachstenSpielerKartenAnzahlErwartet, UnoRegeln.Spieler[_naechsterSpielerIndex].KartenModels.Count);
  289. Assert.DoesNotContain(UnoRegeln.Spieler[_naechsterSpielerIndex].KartenModels[0], UnoRegeln.ZiehKartenStapel.KartenModels);
  290. Assert.DoesNotContain(UnoRegeln.Spieler[_naechsterSpielerIndex].KartenModels[1], UnoRegeln.ZiehKartenStapel.KartenModels);
  291. }
  292. [Theory]
  293. [InlineData(4, 0, 3, true)]
  294. [InlineData(4, 0, 1, false)]
  295. [InlineData(4, 2, 3, false)]
  296. [InlineData(4, 3, 2, true)]
  297. [InlineData(3, 1, 2, false)]
  298. private void RetoureKarteAufStapelLegenTest(int anzahlSpieler, int aktuellerSpielerIndex, int naechsterSpielerIndex, bool uhrzeigerSinn)
  299. {
  300. //arrange
  301. UnoRegeln.ZiehKartenStapelZusammenstellen();
  302. BeispielMultipleSpielerModelsFüllen(anzahlSpieler);
  303. foreach (var spieler in SpielerModels)
  304. {
  305. UnoRegeln.SpielerErstellen(spieler.SpielerName);
  306. }
  307. var erwartet = !uhrzeigerSinn;
  308. var _aktuellerSpielerIndex = aktuellerSpielerIndex;
  309. var beispielZuLegendeKarte = BeispielKarte(Kartenbezeichnung.RetoureKarte.ToString(), Farbe.Gelb.ToString(), true);
  310. //act
  311. UnoRegeln.Uhrzeigersinn = uhrzeigerSinn;
  312. UnoRegeln.KarteAufStapelLegen(UnoRegeln.Spieler[_aktuellerSpielerIndex].SpielerModel.Id, beispielZuLegendeKarte);
  313. //assert
  314. Assert.Equal(naechsterSpielerIndex, UnoRegeln.Spieler.FindIndex(x => x.SpielerModel.Id == UnoRegeln.NaechsterSpielerId));
  315. }
  316. [Theory]
  317. [InlineData(4, 1, 3, true)]
  318. [InlineData(4, 1, 3, false)]
  319. [InlineData(4, 2, 4, true)]
  320. [InlineData(4, 2, 4, false)]
  321. [InlineData(4, 3, 1, true)]
  322. [InlineData(4, 3, 1, false)]
  323. [InlineData(6, 1, 3, true)]
  324. [InlineData(6, 1, 5, false)]
  325. [InlineData(6, 2, 4, true)]
  326. [InlineData(6, 2, 6, false)]
  327. [InlineData(6, 3, 5, true)]
  328. [InlineData(6, 3, 1, false)]
  329. [InlineData(6, 4, 6, true)]
  330. [InlineData(6, 4, 2, false)]
  331. [InlineData(6, 5, 1, true)]
  332. [InlineData(6, 5, 3, false)]
  333. [InlineData(6, 6, 2, true)]
  334. [InlineData(6, 6, 4, false)]
  335. private void AussetzenKarteAufStapelLegenTest(int anzahlSpieler, int aktuellerSpielerId, int naechsterSpielerId, bool uhrzeigerSinn)
  336. {
  337. //arrange
  338. UnoRegeln.ZiehKartenStapelZusammenstellen();
  339. BeispielMultipleSpielerModelsFüllen(anzahlSpieler);
  340. foreach (var spieler in SpielerModels)
  341. {
  342. UnoRegeln.SpielerErstellen(spieler.SpielerName);
  343. }
  344. var erwartetNaechsterSpielerId = naechsterSpielerId;
  345. var _aktuellerSpielerId = aktuellerSpielerId;
  346. var beispielZuLegendeKarte = BeispielKarte(Kartenbezeichnung.AussetzenKarte.ToString(), Farbe.Rot.ToString(), true);
  347. UnoRegeln.Uhrzeigersinn = uhrzeigerSinn;
  348. //act
  349. UnoRegeln.KarteAufStapelLegen(_aktuellerSpielerId, beispielZuLegendeKarte);
  350. //assert
  351. Assert.Equal(erwartetNaechsterSpielerId, UnoRegeln.NaechsterSpielerId);
  352. }
  353. #region Stapel erstellen
  354. [Theory]
  355. [InlineData((Kartenbezeichnung)0, Farbe.Rot, false, 19)]
  356. [InlineData((Kartenbezeichnung)1, Farbe.Rot, false, 19)]
  357. [InlineData((Kartenbezeichnung)2, Farbe.Gelb, false, 19)]
  358. [InlineData((Kartenbezeichnung)3, Farbe.Gruen, false, 19)]
  359. [InlineData((Kartenbezeichnung)4, Farbe.Rot, false, 19)]
  360. [InlineData((Kartenbezeichnung)5, Farbe.Blau, false, 19)]
  361. [InlineData((Kartenbezeichnung)6, Farbe.Gruen, false, 19)]
  362. [InlineData((Kartenbezeichnung)7, Farbe.Blau, false, 19)]
  363. [InlineData((Kartenbezeichnung)8, Farbe.Gruen, false, 19)]
  364. [InlineData((Kartenbezeichnung)9, Farbe.Gelb, false, 19)]
  365. private void ErstelleStandardKartenTest(Kartenbezeichnung kartenbezeichnung, Farbe farbe, bool spezial, int anzahl)
  366. {
  367. //arrange
  368. var _kartenbezeichnung = kartenbezeichnung.ToString();
  369. var _farbe = farbe.ToString();
  370. var _spezial = spezial;
  371. var _anzahl = anzahl;
  372. var erwartet = BeispielKarte(_kartenbezeichnung, _farbe, _spezial);
  373. //act
  374. var neuesDeck = Uno.ErstelleStandardKarten();
  375. var anzahlBlau = neuesDeck.KartenModels.Where(x => x.Farbe.Equals(Farbe.Blau.ToString())).Count();
  376. var anzahlRot = neuesDeck.KartenModels.Where(x => x.Farbe.Equals(Farbe.Rot.ToString())).Count();
  377. var anzahlGruen = neuesDeck.KartenModels.Where(x => x.Farbe.Equals(Farbe.Gruen.ToString())).Count();
  378. var anzahlGelb = neuesDeck.KartenModels.Where(x => x.Farbe.Equals(Farbe.Gelb.ToString())).Count();
  379. //assert
  380. Assert.Equal(_anzahl, anzahlBlau);
  381. Assert.Equal(_anzahl, anzahlRot);
  382. Assert.Equal(_anzahl, anzahlGruen);
  383. Assert.Equal(_anzahl, anzahlGelb);
  384. Assert.Contains(neuesDeck.KartenModels, n =>
  385. n.Name.Equals(erwartet.Name) &&
  386. n.Farbe.Equals(erwartet.Farbe) &&
  387. n.Spezial == erwartet.Spezial
  388. );
  389. }
  390. [Theory]
  391. [InlineData(Kartenbezeichnung.PlusZweiKarte, Farbe.Gelb, true, 6)]
  392. [InlineData(Kartenbezeichnung.PlusZweiKarte, Farbe.Blau, true, 6)]
  393. [InlineData(Kartenbezeichnung.PlusZweiKarte, Farbe.Gruen, true, 6)]
  394. [InlineData(Kartenbezeichnung.PlusZweiKarte, Farbe.Rot, true, 6)]
  395. [InlineData(Kartenbezeichnung.RetoureKarte, Farbe.Gelb, true, 6)]
  396. [InlineData(Kartenbezeichnung.RetoureKarte, Farbe.Blau, true, 6)]
  397. [InlineData(Kartenbezeichnung.RetoureKarte, Farbe.Gruen, true, 6)]
  398. [InlineData(Kartenbezeichnung.RetoureKarte, Farbe.Rot, true, 6)]
  399. [InlineData(Kartenbezeichnung.AussetzenKarte, Farbe.Gelb, true, 6)]
  400. [InlineData(Kartenbezeichnung.AussetzenKarte, Farbe.Blau, true, 6)]
  401. [InlineData(Kartenbezeichnung.AussetzenKarte, Farbe.Gruen, true, 6)]
  402. [InlineData(Kartenbezeichnung.AussetzenKarte, Farbe.Rot, true, 6)]
  403. private void ErstelleFarbigeSpezialKartenTest(Kartenbezeichnung kartenbezeichnung, Farbe farbe, bool spezial, int anzahl)
  404. {
  405. //arrange
  406. var _kartenbezeichnung = kartenbezeichnung.ToString();
  407. var _farbe = farbe.ToString();
  408. var _spezial = spezial;
  409. var _anzahl = anzahl;
  410. var erwartet = BeispielKarte(_kartenbezeichnung, _farbe, _spezial);
  411. //act
  412. var neuesDeck = Uno.ErstelleFarbigeSpezialKarten();
  413. var anzahlBlau = neuesDeck.KartenModels.Where(x => x.Farbe.Equals(Farbe.Blau.ToString())).Count();
  414. var anzahlRot = neuesDeck.KartenModels.Where(x => x.Farbe.Equals(Farbe.Rot.ToString())).Count();
  415. var anzahlGruen = neuesDeck.KartenModels.Where(x => x.Farbe.Equals(Farbe.Gruen.ToString())).Count();
  416. var anzahlGelb = neuesDeck.KartenModels.Where(x => x.Farbe.Equals(Farbe.Gelb.ToString())).Count();
  417. //assert
  418. Assert.Equal(_anzahl, anzahlBlau);
  419. Assert.Equal(_anzahl, anzahlRot);
  420. Assert.Equal(_anzahl, anzahlGruen);
  421. Assert.Equal(_anzahl, anzahlGelb);
  422. Assert.Contains(neuesDeck.KartenModels, n =>
  423. n.Name.Equals(erwartet.Name) &&
  424. n.Farbe.Equals(erwartet.Farbe) &&
  425. n.Spezial == erwartet.Spezial
  426. );
  427. }
  428. [Theory]
  429. [InlineData(Kartenbezeichnung.FarbwahlKarte, Farbe.Keine, true, 4)]
  430. [InlineData(Kartenbezeichnung.ZiehVierFarbenwahlkarte, Farbe.Keine, true, 4)]
  431. private void ErstelleJokerKartenTest(Kartenbezeichnung kartenbezeichnung, Farbe farbe, bool spezial, int anzahl)
  432. {
  433. //arrange
  434. var _kartenbezeichnung = kartenbezeichnung.ToString();
  435. var _farbe = farbe.ToString();
  436. var _spezial = spezial;
  437. var _anzahl = anzahl;
  438. var erwartet = BeispielKarte(_kartenbezeichnung, _farbe, _spezial);
  439. //act
  440. var neuesDeck = Uno.ErstelleJokerKarten();
  441. var ergebnisAnzahl = neuesDeck.KartenModels.Where(x => x.Name.Equals(kartenbezeichnung.ToString())).Count();
  442. //assert
  443. Assert.Equal(_anzahl, ergebnisAnzahl);
  444. Assert.Contains(neuesDeck.KartenModels, n =>
  445. n.Name.Equals(erwartet.Name) &&
  446. n.Farbe.Equals(erwartet.Farbe) &&
  447. n.Spezial == erwartet.Spezial
  448. );
  449. }
  450. [Fact]
  451. private void AblagestapelZusammenstellenTest()
  452. {
  453. UnoRegeln.ZiehKartenStapelZusammenstellen();
  454. var ergebnis = UnoRegeln.ZiehKartenStapel;
  455. Assert.Equal(108, ergebnis.KartenModels.Count());
  456. }
  457. #endregion
  458. }
  459. }