diff --git a/Doxyfile b/Doxyfile
index 02031d18..f95cfd10 100644
--- a/Doxyfile
+++ b/Doxyfile
@@ -941,6 +941,7 @@ EXCLUDE_PATTERNS += */ffmpeg/*
EXCLUDE_PATTERNS += */bin/*
EXCLUDE_PATTERNS += */obj/*
EXCLUDE_PATTERNS += */dist/*
+EXCLUDE_PATTERNS += */Kyoo.Tests/*
# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
# (namespaces, classes, functions, etc.) that should be excluded from the
diff --git a/Kyoo.Tests/Kyoo.Tests.csproj b/Kyoo.Tests/Kyoo.Tests.csproj
new file mode 100644
index 00000000..0a5a4355
--- /dev/null
+++ b/Kyoo.Tests/Kyoo.Tests.csproj
@@ -0,0 +1,32 @@
+
+
+
+ net5.0
+ default
+ false
+
+ Zoe Roux
+ SDG
+
+
+
+
+
+
+
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+ all
+
+
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+ all
+
+
+
+
+
+
+
+
+
+
diff --git a/Kyoo.Tests/UtilityTests.cs b/Kyoo.Tests/UtilityTests.cs
new file mode 100644
index 00000000..e046cdb9
--- /dev/null
+++ b/Kyoo.Tests/UtilityTests.cs
@@ -0,0 +1,24 @@
+using System;
+using System.Linq.Expressions;
+using Kyoo.Models;
+using Xunit;
+
+namespace Kyoo.Tests
+{
+ public class UtilityTests
+ {
+ [Fact]
+ public void IsPropertyExpression_Tests()
+ {
+ Expression> member = x => x.ID;
+ Expression> memberCast = x => x.ID;
+
+ Assert.True(Utility.IsPropertyExpression(null));
+ Assert.True(Utility.IsPropertyExpression(member));
+ Assert.True(Utility.IsPropertyExpression(memberCast));
+
+ Expression> call = x => x.GetID("test");
+ Assert.False(Utility.IsPropertyExpression(call));
+ }
+ }
+}
\ No newline at end of file
diff --git a/Kyoo.sln b/Kyoo.sln
index cc3d4222..0eb53fe3 100644
--- a/Kyoo.sln
+++ b/Kyoo.sln
@@ -5,6 +5,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Kyoo.Common", "Kyoo.Common\
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Kyoo.CommonAPI", "Kyoo.CommonAPI\Kyoo.CommonAPI.csproj", "{6F91B645-F785-46BB-9C4F-1EFC83E489B6}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Kyoo.Tests", "Kyoo.Tests\Kyoo.Tests.csproj", "{D179D5FF-9F75-4B27-8E27-0DBDF1806611}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -23,5 +25,9 @@ Global
{6F91B645-F785-46BB-9C4F-1EFC83E489B6}.Debug|Any CPU.Build.0 = Debug|Any CPU
{6F91B645-F785-46BB-9C4F-1EFC83E489B6}.Release|Any CPU.ActiveCfg = Release|Any CPU
{6F91B645-F785-46BB-9C4F-1EFC83E489B6}.Release|Any CPU.Build.0 = Release|Any CPU
+ {D179D5FF-9F75-4B27-8E27-0DBDF1806611}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {D179D5FF-9F75-4B27-8E27-0DBDF1806611}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {D179D5FF-9F75-4B27-8E27-0DBDF1806611}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {D179D5FF-9F75-4B27-8E27-0DBDF1806611}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
EndGlobal