Merge dev-model-tu -> dev-model
continuous-integration/drone/push Build is failing Details

pull/16/head
Corentin LEMAIRE 2 years ago
commit 9b90b53f29

@ -0,0 +1,42 @@
kind: pipeline
type: docker
name: CI_Linaris_pipeline
trigger:
event:
- push
steps:
- name: build
image: hub.codefirst.iut.uca.fr/marc.chevaldonne/codefirst-dotnet7-maui:latest
commands:
- cd Sources/
- dotnet restore Linaris.sln
- dotnet build Linaris.sln -c Release --no-restore /p:AndroidSdkDirectory=$ANDROID_SDK_ROOT -property:Aapt2ToolPath=$ANDROID_SDK_ROOT/build-tools/33.0.0
- dotnet publish Linaris/Linaris.csproj -c Release --no-restore -o $CI_PROJECT_DIR/build/release -f:net7.0-android /p:AndroidSdkDirectory=/usr/lib/android-sdk
- name: tests
image: hub.codefirst.iut.uca.fr/marc.chevaldonne/codefirst-dotnet7-maui:latest
commands:
- cd Sources/
- dotnet restore Linaris.sln
- dotnet test Linaris.sln --no-restore /p:AndroidSdkDirectory=$ANDROID_SDK_ROOT -property:Aapt2ToolPath=$ANDROID_SDK_ROOT/build-tools/33.0.0
depends_on: [build]
- name: code-inspection
image: hub.codefirst.iut.uca.fr/marc.chevaldonne/codefirst-dronesonarplugin-dotnet7-maui
secrets: [ SECRET_SONAR_LOGIN ]
environment:
sonar_host: https://codefirst.iut.uca.fr/sonar/
sonar_token:
from_secret: SECRET_SONAR_LOGIN
project_key: Linaris_LEMAIRE_LABORIE
coverage_exclusions: "Tests/**"
commands:
- cd Sources/
- dotnet restore Linaris.sln
- dotnet sonarscanner begin /k:$${project_key} /d:sonar.host.url=$${sonar_host} /d:sonar.coverageReportPaths="coveragereport/SonarQube.xml" /d:sonar.coverage.exclusions=$${coverage_exclusions} /d:sonar.login=$${sonar_token}
- dotnet build Linaris.sln -c Release --no-restore /p:AndroidSdkDirectory=$ANDROID_SDK_ROOT -property:Aapt2ToolPath=$ANDROID_SDK_ROOT/build-tools/33.0.0
- dotnet test Linaris.sln --logger trx --no-restore /p:AndroidSdkDirectory=$ANDROID_SDK_ROOT -property:Aapt2ToolPath=$ANDROID_SDK_ROOT/build-tools/33.0.0 /p:CollectCoverage=true /p:CoverletOutputFormat=cobertura --collect "XPlat Code Coverage"
- reportgenerator -reports:"**/coverage.cobertura.xml" -reporttypes:SonarQube -targetdir:"coveragereport"
- dotnet publish Linaris/Linaris.csproj -c Release --no-restore -o $CI_PROJECT_DIR/build/release -f:net7.0-android /p:AndroidSdkDirectory=/usr/lib/android-sdk
- dotnet sonarscanner end /d:sonar.login=$${sonar_token}
depends_on: [tests]

@ -5,9 +5,11 @@ VisualStudioVersion = 17.0.31611.283
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Linaris", "Linaris\Linaris.csproj", "{9E6281F7-95F6-472C-B268-894CE377C8A9}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Console", "Console\Console.csproj", "{BB50C1E3-5A9A-40AF-8CD7-55B41064290B}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Console", "Console\Console.csproj", "{BB50C1E3-5A9A-40AF-8CD7-55B41064290B}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Model", "Model\Model.csproj", "{AA1DB94B-8273-437F-A07A-BB1F5F0D278D}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Model", "Model\Model.csproj", "{AA1DB94B-8273-437F-A07A-BB1F5F0D278D}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestUnitaires", "TestUnitaires\TestUnitaires.csproj", "{8B0671CF-1302-4244-8837-916E632007E2}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@ -29,6 +31,10 @@ Global
{AA1DB94B-8273-437F-A07A-BB1F5F0D278D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{AA1DB94B-8273-437F-A07A-BB1F5F0D278D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{AA1DB94B-8273-437F-A07A-BB1F5F0D278D}.Release|Any CPU.Build.0 = Release|Any CPU
{8B0671CF-1302-4244-8837-916E632007E2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{8B0671CF-1302-4244-8837-916E632007E2}.Debug|Any CPU.Build.0 = Debug|Any CPU
{8B0671CF-1302-4244-8837-916E632007E2}.Release|Any CPU.ActiveCfg = Release|Any CPU
{8B0671CF-1302-4244-8837-916E632007E2}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE

@ -6,13 +6,4 @@ public partial class AlbumPage : ContentPage
{
InitializeComponent();
}
/* async void Button_Clicked(object sender, EventArgs e)
{
var random = new Random();
var color = String.Format("#{0:X6}", random.Next(0x1000000));
bouton.BackgroundColor = Color.FromArgb(color);
await bouton.RelRotateTo(360, 1000);
bouton.Rotation = 0;
}*/
}

@ -9,7 +9,7 @@ public partial class FooterPage : ContentView
System.Timers.Timer timer;
bool changementManuel = true;
bool closing = false;
string morceauEnCours;
// string morceauEnCours;
public FooterPage()
{
@ -19,7 +19,7 @@ public partial class FooterPage : ContentView
// (s,a) = convention, s = sender, a = arguments, si appli fermée, on free tout
outputDevice.PlaybackStopped += PlaybackStoppedHandler;
/*morceauEnCours = "peaches.mp3";
/*morceauEnCours = "Resources/Musics/peaches.mp3";
audioFile = new AudioFileReader(morceauEnCours);
outputDevice.Init(audioFile);*/
}

@ -1,8 +1,10 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>net7.0-android;net7.0-ios;net7.0-maccatalyst</TargetFrameworks>
<TargetFrameworks Condition="$([MSBuild]::IsOSPlatform('windows'))">$(TargetFrameworks);net7.0-windows10.0.19041.0</TargetFrameworks>
<TargetFrameworks>net7.0-android</TargetFrameworks>
<TargetFrameworks Condition="$([MSBuild]::IsOSPlatform('windows'))">$(TargetFrameworks);net7.0-windows10.0.19041.0</TargetFrameworks>
<TargetFrameworks Condition="$([MSBuild]::IsOSPlatform('ios'))">$(TargetFrameworks);net7.0-ios</TargetFrameworks>
<TargetFrameworks Condition="$([MSBuild]::IsOSPlatform('maccatalyst'))">$(TargetFrameworks);net7.0-maccatalyst</TargetFrameworks>
<!-- Uncomment to also build the tizen app. You will need to install tizen by following this: https://github.com/Samsung/Tizen.NET -->
<!-- <TargetFrameworks>$(TargetFrameworks);net7.0-tizen</TargetFrameworks> -->
<OutputType>Exe</OutputType>

@ -2,23 +2,19 @@
public partial class MainPage : ContentPage
{
// int count = 0;
public MainPage()
{
InitializeComponent();
}
/*private void OnCounterClicked(object sender, EventArgs e)
{
count++;
}
async public Task Go_Home()
{
await Navigation.PushAsync(new MainPage());
}
if (count == 1)
CounterBtn.Text = $"Clicked {count} time";
else
CounterBtn.Text = $"Clicked {count} times";
SemanticScreenReader.Announce(CounterBtn.Text);
}*/
}

@ -53,7 +53,16 @@ namespace Model
set
{
if (value != null && value.Contains('.'))
if (value == null || !value.Contains('.'))
{
value = "none.png";
imageURL = value;
}
if (value.Contains(' '))
{
imageURL = value.Replace(' ', '_');
}
else if (value.Contains('.'))
{
imageURL = value;
}
@ -100,10 +109,7 @@ namespace Model
public void RemoveTitle(Title title)
{
foreach(var item in titles)
{
titles = titles.Where(item => item != title).ToList();
}
titles.Remove(title);
}
public override bool Equals(object? obj)

@ -1,4 +1,5 @@
using Model.Stub;
using System.Runtime.CompilerServices;
namespace Model;

@ -1,48 +1,48 @@
namespace Model;
public interface IDataManager
namespace Model;
public interface IDataManager
{
// Create
void AddAlbum(Album album);
void AddAlbums(List<Album> albumsList);
void AddArtist(Artist artist);
void AddArtists(List<Artist> artistsList);
void AddPlaylist(Playlist playlist);
void AddPlaylists(List<Playlist> playlistsList);
void AddCustomTitle(CustomTitle title);
void AddCustomTitles(List<CustomTitle> customTitlesList);
void AddAlbum(Album album);
void AddAlbums(List<Album> albumsList);
void AddArtist(Artist artist);
void AddArtists(List<Artist> artistsList);
void AddPlaylist(Playlist playlist);
void AddPlaylists(List<Playlist> playlistsList);
void AddCustomTitle(CustomTitle title);
void AddCustomTitles(List<CustomTitle> customTitlesList);
void AddInfoTitle(InfoTitle title);
void AddInfoTitles(List<InfoTitle> infoTitlesList);
// Read
List<CustomTitle> GetCustomTitles();
CustomTitle? GetCustomTitleByUrl(string custom);
List<InfoTitle> GetInfoTitles();
InfoTitle? GetInfoTitleByUrl(string url);
List<Album> GetAlbums();
Album? GetAlbumByUrl(string url);
List<Artist> GetArtists();
Artist? GetArtistByName(string name);
List<Playlist> GetPlaylists();
Playlist? GetPlaylistByUrl(string url);
List<CustomTitle> GetCustomTitles();
CustomTitle? GetCustomTitleByUrl(string custom);
List<InfoTitle> GetInfoTitles();
InfoTitle? GetInfoTitleByUrl(string url);
List<Album> GetAlbums();
Album? GetAlbumByUrl(string url);
List<Artist> GetArtists();
Artist? GetArtistByName(string name);
List<Playlist> GetPlaylists();
Playlist? GetPlaylistByUrl(string url);
// Update
@ -75,49 +75,49 @@ public interface IDataManager
void UpdateArtistByName(string name, string newName);
// Delete
void RemoveAlbum(Album album);
void RemoveAlbums(List<Album> albumsList);
void RemoveArtist(Artist artist);
void RemoveArtists(List<Artist> artistsList);
void RemovePlaylist(Playlist playlist);
void RemovePlaylists(List<Playlist> playlistsList);
void RemoveCustomTitle(CustomTitle title);
void RemoveCustomTitles(List<CustomTitle> customTitlesList);
void RemoveInfoTitle(InfoTitle title);
void RemoveInfoTitles(List<InfoTitle> infoTitlesList);
// Serialization
void LoadSerialization();
void SaveSerialization();
// Exists
bool ExistsPlaylist(Playlist playlist);
bool ExistsPlaylistByUrl(string url);
bool ExistsAlbum(Album album);
bool ExistsAlbumByUrl(string url);
bool ExistsArtist(Artist artist);
bool ExistsArtistByName(string name);
bool ExistsCustomTitle(CustomTitle title);
bool ExistsCustomTitleByUrl(string url);
bool ExistsInfoTitle(InfoTitle title);
bool ExistsInfoTitleByUrl(string url);
void RemoveAlbum(Album album);
void RemoveAlbums(List<Album> albumsList);
void RemoveArtist(Artist artist);
void RemoveArtists(List<Artist> artistsList);
void RemovePlaylist(Playlist playlist);
void RemovePlaylists(List<Playlist> playlistsList);
void RemoveCustomTitle(CustomTitle title);
void RemoveCustomTitles(List<CustomTitle> customTitlesList);
void RemoveInfoTitle(InfoTitle title);
void RemoveInfoTitles(List<InfoTitle> infoTitlesList);
// Serialization
void LoadSerialization();
void SaveSerialization();
// Exists
bool ExistsPlaylist(Playlist playlist);
bool ExistsPlaylistByUrl(string url);
bool ExistsAlbum(Album album);
bool ExistsAlbumByUrl(string url);
bool ExistsArtist(Artist artist);
bool ExistsArtistByName(string name);
bool ExistsCustomTitle(CustomTitle title);
bool ExistsCustomTitleByUrl(string url);
bool ExistsInfoTitle(InfoTitle title);
bool ExistsInfoTitleByUrl(string url);
}

@ -87,4 +87,4 @@ public class InfoTitle : Title
{
return $"Name : {Name}, ImageUrl : {ImageURL}";
}
}
}

@ -35,22 +35,32 @@ public class Playlist
private string description = Manager.DEFAULT_DESC;
private List<Title> morceaux = new List<Title>();
public IEnumerable<Title> Morceaux {
get
public IEnumerable<Title> Titles
{
get
{
return morceaux.ToList();
}
return titles;
}
}
private readonly List<Title> titles = new List<Title>();
public string ImageURL
{
get => imageURL;
set
{
if (value != null && value.Contains('.'))
if (value == null || !value.Contains('.'))
{
value = "none.png";
imageURL = value;
}
if (value.Contains(' '))
{
imageURL = value.Replace(' ', '_');
}
else if (value.Contains('.'))
{
imageURL = value;
}
@ -65,7 +75,7 @@ public class Playlist
set
{
if (value < morceaux.Count())
if (value < titles.Count())
{
index = value;
}
@ -109,16 +119,17 @@ public class Playlist
public Playlist()
{
}
public void AddTitle(CustomTitle morceau)
{
morceaux.Add(morceau);
titles.Add(morceau);
}
public void RemoveTitle(CustomTitle morceau)
{
morceaux.Remove(morceau);
titles.Remove(morceau);
}
public void NextTitle()
@ -135,7 +146,7 @@ public class Playlist
}
else
{
Index = Aleatoire.Next(morceaux.Count());
Index = Aleatoire.Next(titles.Count());
played.Add(Index);
}
}
@ -165,9 +176,9 @@ public class Playlist
public Title? GetCurrentTitle()
{
if (Index < morceaux.Count())
if (Index < titles.Count())
{
return morceaux[Index];
return titles[Index];
}
else
{

@ -26,7 +26,16 @@ namespace Model
set
{
if (value != null && value.Contains('.'))
if (value == null || !value.Contains('.'))
{
value = "none.png";
imageURL = value;
}
if (value.Contains(' '))
{
imageURL = value.Replace(' ', '_');
}
else if (value.Contains('.'))
{
imageURL = value;
}

@ -0,0 +1,46 @@
using Model;
using Newtonsoft.Json.Linq;
using NuGet.Frameworks;
namespace TestUnitaires
{
public class TU_Album
{
[Theory]
[InlineData("Fenêtre sur Rue","album2. jpg","Un banger","Sortie : 2012")]
[InlineData("Adios Bahamas", "album.jpg", "Un banger", "Sortie : 2012")]
[InlineData(null, "album2.jpg", "Un banger", "Sortie : 2012")]
[InlineData("Dans La Légende", null, "Un banger", "Sortie : 2012")]
[InlineData("Dans La Légende","album1.jpg", null, "Sortie : 2012")]
[InlineData("Dans La Légende", "album1.jpg", "Un banger", null)]
[InlineData("Dans La Légende", "album1jpg", "Un banger", "Sortie : 2012")]
public void TU_Attributes(string nameAlbum, string url, string desc, string info)
{
Album album = new Album(nameAlbum, url, new Artist("test"), desc, info);
Assert.True(album.Name != null && album.Name.Length < 75);
Assert.True(album.ImageURL != null && album.ImageURL.Contains('.'));
Assert.False(album.ImageURL.Contains(' '));
Assert.True(album.Description != null && album.Description.Length < 500);
Assert.True(album.Information != null && album.Information.Length < 500);
}
[Theory]
[InlineData("Fenêtre sur Rue", "album2. jpg", "Un banger", "Sortie : 2012")]
[InlineData("Adios Bahamas", "album.jpg", "Un banger", "Sortie : 2012")]
[InlineData(null, "album2.jpg", "Un banger", "Sortie : 2012")]
[InlineData("Dans La Légende", null, "Un banger", "Sortie : 2012")]
[InlineData("Dans La Légende", "album1.jpg", null, "Sortie : 2012")]
[InlineData("Dans La Légende", "album1.jpg", "Un banger", null)]
[InlineData("Dans La Légende", "album1jpg", "Un banger", "Sortie : 2012")]
public void TU_Methods(string nameAlbum, string url, string desc, string info)
{
Album album = new Album(nameAlbum, url, new Artist("test"), desc, info);
Title t = new Title("Débitage", "test. mp3", "Banger");
album.AddTitle(t);
Assert.Contains(t, album.Titles);
album.RemoveTitle(t);
Assert.DoesNotContain(t, album.Titles);
}
}
}

@ -0,0 +1,21 @@
using Model;
using Newtonsoft.Json.Linq;
using NuGet.Frameworks;
namespace TestUnitaires
{
public class TU_Artist
{
[Theory]
[InlineData("Hugo TSR")]
[InlineData(null)]
[InlineData("Hugo TSRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR")]
public void TU_Attributes(string name)
{
Artist a = new Artist(name);
Assert.True(a.Name != null && a.Name.Length < 75);
}
}
}

@ -0,0 +1,31 @@
using Model;
using Newtonsoft.Json.Linq;
using NuGet.Frameworks;
namespace TestUnitaires
{
public class TU_CustomTitle
{
[Theory]
[InlineData("Trajectoire","morceau1.png","Sortie : 2020", "Musique/test.mp3")]
[InlineData(null, "morceau1.png", "Sortie : 2020", "Musique/test.mp3")]
[InlineData("Trajectoire", null, "Sortie : 2020", "Musique/test.mp3")]
[InlineData("Trajectoire", "morceau1.png", null, "Musique/test.mp3")]
[InlineData("Trajectoire", "morceau1png", "Sortie : 2020", "Musique/test.mp3")]
[InlineData("Trajectoire", "morceau1. png", "Sortie : 2020", "Musique/test.mp3")]
[InlineData("Trajectoire", "morceau1.png", "Sortie : 2020", null)]
public void TU_Attributes(string name, string url, string info, string path)
{
CustomTitle ct = new CustomTitle(name, url, info, path);
Assert.True(ct.Name != null && ct.Name.Length < 75);
Assert.True(ct.ImageURL != null && ct.ImageURL.Contains('.'));
Assert.False(ct.ImageURL.Contains(' '));
Assert.True(ct.Information != null && ct.Information.Length < 500);
Assert.True(ct.Path != null && ct.Path.Contains('.'));
Assert.False(ct.Path.Contains(' '));
}
}
}

@ -0,0 +1,45 @@
using Model;
using Newtonsoft.Json.Linq;
using NuGet.Frameworks;
namespace TestUnitaires
{
public class TU_InfoTitle
{
[Theory]
[InlineData("Trajectoire","morceau1.png","Sortie : 2020","Morceau de Népal",Genre.HIP_HOP)]
[InlineData(null, "morceau1.png", "Sortie : 2020", "Morceau de Népal", Genre.HIP_HOP)]
[InlineData("Trajectoire", null, "Sortie : 2020", "Morceau de Népal", Genre.HIP_HOP)]
[InlineData("Trajectoire", "morceau1.png", null, "Morceau de Népal", Genre.HIP_HOP)]
[InlineData("Trajectoire", "morceau1png", "Sortie : 2020", "Morceau de Népal", Genre.HIP_HOP)]
[InlineData("Trajectoire", "morceau1. png", "Sortie : 2020", "Morceau de Népal", Genre.HIP_HOP)]
public void TU_Attributes(string name, string url, string info, string desc, Genre g)
{
InfoTitle it = new InfoTitle(name, url, info, new Artist("test"), desc, g);
Assert.True(it.Name != null && it.Name.Length < 75);
Assert.True(it.ImageURL != null && it.ImageURL.Contains('.'));
Assert.False(it.ImageURL.Contains(' '));
Assert.True(it.Information != null && it.Information.Length < 500);
Assert.True(it.Description != null && it.Description.Length < 500);
}
[Theory]
[InlineData("Trajectoire", "morceau1.png", "Sortie : 2020", "Morceau de Népal", Genre.HIP_HOP)]
[InlineData(null, "morceau1.png", "Sortie : 2020", "Morceau de Népal", Genre.HIP_HOP)]
[InlineData("Trajectoire", null, "Sortie : 2020", "Morceau de Népal", Genre.HIP_HOP)]
[InlineData("Trajectoire", "morceau1.png", null, "Morceau de Népal", Genre.HIP_HOP)]
[InlineData("Trajectoire", "morceau1png", "Sortie : 2020", "Morceau de Népal", Genre.HIP_HOP)]
[InlineData("Trajectoire", "morceau1. png", "Sortie : 2020", "Morceau de Népal", Genre.HIP_HOP)]
public void TU_Methods(string name, string url, string info, string desc, Genre g)
{
InfoTitle it = new InfoTitle(name, url, info, new Artist("test"), desc, g);
Artist a = new Artist("Lahuiss");
it.AddFeat(a);
Assert.Contains(a, it.Feat);
it.RemoveFeat(a);
Assert.DoesNotContain(a, it.Feat);
}
}
}

@ -0,0 +1,38 @@
using Model;
using Model.Serialization;
using Model.Stub;
using Newtonsoft.Json.Linq;
using NuGet.Frameworks;
using System;
namespace TestUnitaires
{
public class TU_Manager
{
[Theory]
[InlineData(null)]
[InlineData("Réference")]
public void TU_Methods(string? test)
{
IDataManager DataManager = new LINQ_XML_Serialization();
Playlist p = new Playlist(test, "PlaceHolder", "place.holder");
Album album = new Album(test, "place.holder", new Artist("test"), "PlaceHolder", "PlaceHolder");
CustomTitle t = new CustomTitle(test, "test. mp3", "Banger", "path");
Manager m = new Manager(DataManager);
m.AddCustomTitle(t);
m.AddPlaylist(p);
m.AddAlbum(album);
Assert.Contains(t, m.CustomTitles);
Assert.Contains(album, m.Albums);
Assert.Contains(p, m.Playlists);
m.RemovePlaylist(p);
m.RemoveAlbum(album);
m.RemoveCustomTitle(t);
Assert.DoesNotContain(t, m.CustomTitles);
Assert.DoesNotContain(p, m.Playlists);
Assert.DoesNotContain(album, m.Albums);
}
}
}

@ -0,0 +1,45 @@
using Model;
using Newtonsoft.Json.Linq;
using NuGet.Frameworks;
namespace TestUnitaires
{
public class TU_Playlist
{
[Theory]
[InlineData("Sons Soirées","red-sky.png","Contient les sons que je mets quand je suis en soirée.")]
[InlineData(null, "red-sky.png", "Contient les sons que je mets quand je suis en soirée.")]
[InlineData("Sons Soirées", null, "Contient les sons que je mets quand je suis en soirée.")]
[InlineData("Sons Soirées", "red-sky.png", null)]
[InlineData("Sons Soirées", "redskypng", "Contient les sons que je mets quand je suis en soirée.")]
[InlineData("Sons Soirées", "red-sky .png", "Contient les sons que je mets quand je suis en soirée.")]
public void TU_Attributes(string name, string url, string desc)
{
Playlist p = new Playlist(name, desc, url);
Assert.True(p.Name != null && p.Name.Length < 75);
Assert.True(p.ImageURL != null && p.ImageURL.Contains('.'));
Assert.False(p.ImageURL.Contains(' '));
Assert.True(p.Description != null && p.Description.Length < 500);
}
[Theory]
[InlineData("Sons Soirées", "red-sky.png", "Contient les sons que je mets quand je suis en soirée.")]
[InlineData(null, "red-sky.png", "Contient les sons que je mets quand je suis en soirée.")]
[InlineData("Sons Soirées", null, "Contient les sons que je mets quand je suis en soirée.")]
[InlineData("Sons Soirées", "red-sky.png", null)]
[InlineData("Sons Soirées", "redskypng", "Contient les sons que je mets quand je suis en soirée.")]
[InlineData("Sons Soirées", "red-sky .png", "Contient les sons que je mets quand je suis en soirée.")]
public void TU_Methods(string name, string url, string desc)
{
Playlist p = new Playlist(name, desc, url);
CustomTitle t = new CustomTitle("Débitage","test. mp3","Banger","path");
p.AddTitle(t);
Assert.Contains(t,p.Titles);
p.RemoveTitle(t);
Assert.DoesNotContain(t,p.Titles);
}
}
}

@ -0,0 +1,27 @@
using Model;
using Newtonsoft.Json.Linq;
using NuGet.Frameworks;
namespace TestUnitaires
{
public class TU_Title
{
[Theory]
[InlineData("Trajectoire","morceau1.png","Sortie : 2020")]
[InlineData(null, "morceau1.png", "Sortie : 2020")]
[InlineData("Trajectoire", null, "Sortie : 2020")]
[InlineData("Trajectoire", "morceau1.png", null)]
[InlineData("Trajectoire", "morceau1png", "Sortie : 2020")]
[InlineData("Trajectoire", "morceau1. png", "Sortie : 2020")]
public void TU_Attributes(string name, string url, string info)
{
Title t = new Title(name, url, info);
Assert.True(t.Name != null && t.Name.Length < 75);
Assert.True(t.ImageURL != null && t.ImageURL.Contains('.'));
Assert.False(t.ImageURL.Contains(' '));
Assert.True(t.Information != null && t.Information.Length < 500);
}
}
}

@ -0,0 +1,28 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net7.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<IsPackable>false</IsPackable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.3.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>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Model\Model.csproj" />
</ItemGroup>
</Project>

@ -0,0 +1 @@
global using Xunit;
Loading…
Cancel
Save