Tentative pour la relation many-to-many entre Champions et RunesPages
continuous-integration/drone/push Build is failing Details

pull/1/head
Théo DUPIN 2 years ago
parent 49d1a92294
commit 35cc84d0c5

@ -3,7 +3,9 @@
using DBEntitiesWithStub;
using EntityFrameworkLib;
using Microsoft.EntityFrameworkCore;
using Model;
using System.Net;
using static Model.RunePage;
// Test d'ajout d'image dans la BDD d'un Champion avec son image
string imageUrl = "https://ddragon.leagueoflegends.com/cdn/img/champion/splash/Jax_0.jpg";
@ -63,7 +65,7 @@ List<SkinEntity> skins = new List<SkinEntity>
}
};
List<CharacteristicEntity> characteristic = new List<CharacteristicEntity>
List<CharacteristicEntity> characteristics = new List<CharacteristicEntity>
{
new CharacteristicEntity
{
@ -77,6 +79,25 @@ List<CharacteristicEntity> characteristic = new List<CharacteristicEntity>
}
};
List<RunePageEntity> runePages = new List<RunePageEntity>
{
new RunePageEntity
{
Name = "Jax Top",
Runes = new Dictionary<Category, RuneEntity>
{
{ Category.Major, new RuneEntity { Name = "Tempo Mortel", Description = "Les attaques de base contre les champions ennemisoctroient un cumul pendant 6 secondes, se régénérant lors des attaques suivantes et se cumulant jusqu'à 6 fois. Gagnez ( 10 % 15 % / 4 % 9 % ) (basé sur le niveau) vitesse d'attaque bonus pour chaque cumul, jusqu'à ( 60 % 90 % / 24 % 54 % ) (basé sur le niveau) au maximum de cumuls, auquel vous gagnez également 50 bonus de portée d'attaque et augmentez le plafond de vitesse d'attaque à 10.", RuneFamily = RuneFamily.Precision } },
{ Category.Minor1, new RuneEntity { Name = "Triomphe", Description = "marquer un takedown contre un champion ennemivous soigne de 2,5 % de votre santé maximale (+ 5 % de votre santé manquante ) et vous accorde un bonus supplémentaire de 20 pièces d'or après un délai de 1 seconde.", RuneFamily = RuneFamily.Precision} },
{ Category.Minor2, new RuneEntity { Name = "Légende : alatricité", Description = "Gagnez 3 % (+ 1,5 % par pile de légende ) en vitesse d'attaque bonus , jusqu'à 18 % aux piles maximales.", RuneFamily = RuneFamily.Precision} },
{ Category.Minor3, new RuneEntity { Name = "Baroud d'honneur", Description = "Vous infligez 5% - 11% de dégâts supplémentaires aux champions quand vous avez moins de 60% de vos PV. Les dégâts max sont atteints à 30% de vos PV.", RuneFamily = RuneFamily.Precision}},
{ Category.OtherMinor1, new RuneEntity { Name = "Plaque d'os", Description = "Après avoir subi des dégâts d'un champion ennemi, les 3 prochains sorts ou attaques de ce champion vous infligent 30 - 60 pts de dégâts en moins. Durée : 1.5 sec. Délai de récupération : 55 sec.", RuneFamily = RuneFamily.Unknown} },
{ Category.OtherMinor2, new RuneEntity { Name = "Inébranlable", Description = "Vous gagnez +5% de Ténacité et +5% de résistance aux ralentissements. Ces valeurs augmentent avec vos PV manquants, jusqu'à +20% de Ténacité et +20% de résistance aux ralentissements supplémentaires. Les valeurs max sont atteintes à 30% de vos PV. ", RuneFamily = RuneFamily.Unknown} }
}
}
};
using (var context = new SQLiteLolContext())
{
ChampionEntity jax = new ChampionEntity
@ -87,7 +108,8 @@ using (var context = new SQLiteLolContext())
Class = Model.ChampionClass.Fighter,
Image = image,
Skins = skins,
Characteristics = characteristic
Characteristics = characteristics,
RunePages = runePages
};
context.Champions.Add(jax);
context.SaveChanges();

@ -14,7 +14,6 @@ namespace EntityFrameworkLib
public DbSet<LargeImageEntity> Images { get; set; }
public DbSet<RuneEntity> Runes { get; set; }
public DbSet<RunePageEntity> RunesPage { get; set; }
public DbSet<RunePageRuneEntity> RunePageRunes { get; set; }
public LolContext() { }
public LolContext(DbContextOptions<LolContext> options)
: base(options) { }
@ -33,7 +32,6 @@ namespace EntityFrameworkLib
modelBuilder.Entity<LargeImageEntity>().Property(l => l.Id).ValueGeneratedOnAdd();
modelBuilder.Entity<CharacteristicEntity>().HasKey(c => new { c.Name, c.ChampionForeignKey });
modelBuilder.Entity<RunePageRuneEntity>().HasKey(c => new { c.RunePageName, c.RuneName });
//Relation one-to-one entre un champion et une largeImage : un champion n'a qu'une seule largeImage et une largeImage ne peut être attribuée qu'à un seul champion
modelBuilder.Entity<ChampionEntity>()
@ -57,7 +55,8 @@ namespace EntityFrameworkLib
//Relation many-to-many entre les champions et pages de runes : Un Champion peut avoir plusieurs pages de runes et plusieurs pages de runes peuvent être définies sur un champion
modelBuilder.Entity<ChampionEntity>()
.HasMany(c => c.RunePages)
.WithMany(r => r.Champions);
.WithMany(r => r.Champions)
.UsingEntity(x => x.ToTable("ChampionRunePages"));
}
}
}

@ -20,7 +20,6 @@ namespace EntityFrameworkLib
[Required]
public RuneFamily RuneFamily { get; set; }
public ICollection<RunePageRuneEntity>? RunePages { get; set; }
public int? ImageId { get; set; }
[ForeignKey("ImageId")]

@ -1,9 +1,11 @@
using System;
using Model;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static Model.RunePage;
namespace EntityFrameworkLib
{
@ -12,8 +14,12 @@ namespace EntityFrameworkLib
[Key]
[MaxLength(256)]
public string Name { get; set; }
public ICollection<RunePageRuneEntity> Runes { get; set; }
public ICollection<ChampionEntity> Champions { get; set; }
public RuneEntity? this[Category category]
{
get { return Runes.ContainsKey(category) ? Runes[category] : null; }
set { Runes[category] = value; }
}
public Dictionary<Category, RuneEntity> Runes { get; set; }
public ICollection<ChampionEntity>? Champions { get; set; }
}
}

@ -1,24 +0,0 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static Model.RunePage;
namespace EntityFrameworkLib
{
public class RunePageRuneEntity
{
public Category Category { get; set; }
[ForeignKey("RuneName")]
public RuneEntity Rune { get; set; }
public string RuneName { get; set; }
[ForeignKey("RunePageName")]
public RunePageEntity RunePage { get; set; }
public string RunePageName { get; set; }
}
}

@ -138,7 +138,7 @@ namespace UnitTestsSQLiteInMemory
{
context.Database.EnsureCreated();
}
var manager = new StubData.ChampionsManager(data);
var manager = new ChampionsManager(data);
var champion = new Champion("TestChampion", ChampionClass.Mage);
var addedChampion = await manager.AddItem(champion);
@ -160,7 +160,7 @@ namespace UnitTestsSQLiteInMemory
[Fact]
public async Task TestGetChampionsByClass()
{
var manager = new StubData.ChampionsManager(data);
var manager = new ChampionsManager(data);
var nbAssassins = await manager.GetNbItemsByClass(ChampionClass.Assassin);
Assert.Equal(1, nbAssassins);
@ -174,5 +174,32 @@ namespace UnitTestsSQLiteInMemory
var mages = await manager.GetItemsByClass(ChampionClass.Mage, 0, nbMages, "Name", descending: true);
Assert.Equal("Ahri", mages.First().Name);
}
[Fact]
public async Task TestAddAndGetSkinsByName()
{
var manager = new SkinsManager(data);
var champion = new Champion("Jax", ChampionClass.Fighter);
var skin = new Skin("Jaximus", champion);
var addSkin = await manager.AddItem(skin);
Assert.Equal(skin, addSkin);
var nbSkins = await manager.GetNbItemsByName("Jaximus");
Assert.Equal(1, nbSkins);
}
[Fact]
public async Task TestDeleteAndGetSkins()
{
var manager = new SkinsManager(data);
var champion = new Champion("Jax", ChampionClass.Fighter);
var skin = new Skin("Jaximus", champion);
var addSkin = await manager.AddItem(skin);
Assert.Equal(skin, addSkin);
var isDelete = await manager.DeleteItem(skin);
Assert.True(isDelete);
}
}
}
Loading…
Cancel
Save