diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7f7b744..138c660 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -40,9 +40,12 @@ jobs: uses: actions/setup-dotnet@v3 with: dotnet-version: ${{ env.DOTNET_VERSION }} - - name: Import database + - name: Check sqlite3 version + run: sqlite3 --version + - name: Import databases run: | docker exec -i mariadb mariadb -uroot -p123456789 -h127.0.0.1 gamemode < ./scripts/mariadb/gamemode.sql + sqlite3 gamemode.db < ./scripts/sqlite/gamemode.sql - name: Create .env files run: | cp ./tests/Persistence.Tests/.env.test.example ./tests/Persistence.Tests/.env.test diff --git a/scripts/sqlite/gamemode.sql b/scripts/sqlite/gamemode.sql new file mode 100644 index 0000000..22e70d3 --- /dev/null +++ b/scripts/sqlite/gamemode.sql @@ -0,0 +1,21 @@ +BEGIN TRANSACTION; +CREATE TABLE IF NOT EXISTS "players" ( + "id" INTEGER, + "name" TEXT NOT NULL UNIQUE COLLATE NOCASE, + "password" TEXT NOT NULL, + "total_kills" INTEGER NOT NULL, + "total_deaths" INTEGER NOT NULL, + "max_killing_spree" INTEGER NOT NULL, + "brought_flags" INTEGER NOT NULL, + "captured_flags" INTEGER NOT NULL, + "dropped_flags" INTEGER NOT NULL, + "returned_flags" INTEGER NOT NULL, + "head_shots" INTEGER NOT NULL, + "role_id" INTEGER NOT NULL, + "skin_id" INTEGER NOT NULL, + "rank_id" INTEGER NOT NULL, + "created_at" TEXT NOT NULL, + "last_connection" TEXT NOT NULL, + PRIMARY KEY("id") +); +COMMIT; diff --git a/src/Persistence/Persistence.SQLite/SQLiteSettings.cs b/src/Persistence/Persistence.SQLite/SQLiteSettings.cs index f1d3c49..3800d2f 100644 --- a/src/Persistence/Persistence.SQLite/SQLiteSettings.cs +++ b/src/Persistence/Persistence.SQLite/SQLiteSettings.cs @@ -1,6 +1,6 @@ namespace Persistence.SQLite; -internal class SQLiteSettings +public class SQLiteSettings { public string DataSource { get; set; } public string ConnectionString { get; set; } diff --git a/src/Persistence/Persistence.SQLite/sql/seed_data.sql b/src/Persistence/Persistence.SQLite/sql/seed_data.sql new file mode 100644 index 0000000..7ea8f81 --- /dev/null +++ b/src/Persistence/Persistence.SQLite/sql/seed_data.sql @@ -0,0 +1,25 @@ +-- name: InitializeSeedData +DELETE FROM players; +INSERT INTO players +( + name, + password, + total_kills, + total_deaths, + max_killing_spree, + brought_flags, + captured_flags, + dropped_flags, + returned_flags, + head_shots, + role_id, + skin_id, + rank_id, + created_at, + last_connection +) +VALUES +('Admin_Player','$2a$10$60QnEiafBCLfVBMfQkExVeolyBxVHWcSQKTvkxVJj9FUozRpRP/GW',0,0,0,0,0,0,0,0,3,146,0,'2023-10-12 12:19:24','2023-10-13 12:19:24'), +('Moderator_Player','$2a$10$60QnEiafBCLfVBMfQkExVeolyBxVHWcSQKTvkxVJj9FUozRpRP/GW',0,0,0,0,0,0,0,0,2,146,0,'2023-10-12 12:19:24','2023-10-13 12:19:24'), +('VIP_Player','$2a$10$60QnEiafBCLfVBMfQkExVeolyBxVHWcSQKTvkxVJj9FUozRpRP/GW',0,0,0,0,0,0,0,0,1,146,0,'2023-10-12 12:19:24','2023-10-13 12:19:24'), +('Basic_Player','$2a$10$60QnEiafBCLfVBMfQkExVeolyBxVHWcSQKTvkxVJj9FUozRpRP/GW',0,0,0,0,0,0,0,0,0,146,0,'2023-10-12 12:19:24','2023-10-13 12:19:24'); \ No newline at end of file diff --git a/tests/Persistence.Tests/.env.test.example b/tests/Persistence.Tests/.env.test.example index 5d7946d..4674bc4 100644 --- a/tests/Persistence.Tests/.env.test.example +++ b/tests/Persistence.Tests/.env.test.example @@ -4,4 +4,4 @@ MariaDB__Database=gamemode MariaDB__UserName=root MariaDB__Password=123456789 -SQLite__DataSource=gamemode.db \ No newline at end of file +SQLite__DataSource=/home/runner/work/Capture-The-Flag/Capture-The-Flag/gamemode.db \ No newline at end of file diff --git a/tests/Persistence.Tests/Common/InMemoryRepositoryManager.cs b/tests/Persistence.Tests/Common/DatabaseProviders/InMemoryRepositoryManager.cs similarity index 92% rename from tests/Persistence.Tests/Common/InMemoryRepositoryManager.cs rename to tests/Persistence.Tests/Common/DatabaseProviders/InMemoryRepositoryManager.cs index 5be5332..d74e6ca 100644 --- a/tests/Persistence.Tests/Common/InMemoryRepositoryManager.cs +++ b/tests/Persistence.Tests/Common/DatabaseProviders/InMemoryRepositoryManager.cs @@ -1,4 +1,4 @@ -namespace Persistence.Tests.Common; +namespace Persistence.Tests.Common.DatabaseProviders; public class InMemoryRepositoryManager : IRepositoryManager { diff --git a/tests/Persistence.Tests/Common/MariaDbRepositoryManager.cs b/tests/Persistence.Tests/Common/DatabaseProviders/MariaDbRepositoryManager.cs similarity index 95% rename from tests/Persistence.Tests/Common/MariaDbRepositoryManager.cs rename to tests/Persistence.Tests/Common/DatabaseProviders/MariaDbRepositoryManager.cs index d007376..6ecf9d3 100644 --- a/tests/Persistence.Tests/Common/MariaDbRepositoryManager.cs +++ b/tests/Persistence.Tests/Common/DatabaseProviders/MariaDbRepositoryManager.cs @@ -1,4 +1,4 @@ -namespace Persistence.Tests.Common; +namespace Persistence.Tests.Common.DatabaseProviders; public class MariaDbRepositoryManager : IRepositoryManager { diff --git a/tests/Persistence.Tests/Common/DatabaseProviders/SqliteRepositoryManager.cs b/tests/Persistence.Tests/Common/DatabaseProviders/SqliteRepositoryManager.cs new file mode 100644 index 0000000..3091ec7 --- /dev/null +++ b/tests/Persistence.Tests/Common/DatabaseProviders/SqliteRepositoryManager.cs @@ -0,0 +1,33 @@ +namespace Persistence.Tests.Common.DatabaseProviders; + +public class SqliteRepositoryManager : IRepositoryManager +{ + private readonly ServiceProvider _serviceProvider; + public IPlayerRepository PlayerRepository { get; } + public SqliteRepositoryManager() + { + var services = new ServiceCollection(); + IConfiguration configuration = EnvConfigurationBuilder.Instance; + services.AddSingleton(); + services.AddPersistenceSQLiteServices(configuration); + _serviceProvider = services.BuildServiceProvider(); + PlayerRepository = _serviceProvider.GetRequiredService(); + } + + public void Dispose() + { + _serviceProvider.Dispose(); + GC.SuppressFinalize(this); + } + + public void InitializeSeedData() + { + var settings = _serviceProvider.GetRequiredService(); + var sqlCollection = _serviceProvider.GetRequiredService(); + using var connection = new SqliteConnection(settings.ConnectionString); + connection.Open(); + SqliteCommand command = connection.CreateCommand(); + command.CommandText = sqlCollection["InitializeSeedData"]; + command.ExecuteNonQuery(); + } +} diff --git a/tests/Persistence.Tests/Common/RepositoryManagerTestCases.cs b/tests/Persistence.Tests/Common/RepositoryManagerTestCases.cs index a114cb3..8f7ba92 100644 --- a/tests/Persistence.Tests/Common/RepositoryManagerTestCases.cs +++ b/tests/Persistence.Tests/Common/RepositoryManagerTestCases.cs @@ -5,6 +5,7 @@ public class RepositoryManagerTestCases : IEnumerable public IEnumerator GetEnumerator() { yield return new InMemoryRepositoryManager(); + yield return new SqliteRepositoryManager(); yield return new MariaDbRepositoryManager(); } diff --git a/tests/Persistence.Tests/Usings.cs b/tests/Persistence.Tests/Usings.cs index a36f39c..d3e3c93 100644 --- a/tests/Persistence.Tests/Usings.cs +++ b/tests/Persistence.Tests/Usings.cs @@ -4,11 +4,13 @@ global using Microsoft.Extensions.DependencyInjection; global using Microsoft.Extensions.Configuration; global using MySqlConnector; +global using Microsoft.Data.Sqlite; global using YeSql.Net; global using CTF.Application.Common.Services; global using CTF.Application.Players.Accounts; global using CTF.Application.Players.Ranks; global using Persistence.Tests.Common; +global using Persistence.Tests.Common.DatabaseProviders; global using Persistence.InMemory; global using Persistence.SQLite; global using Persistence.MariaDB; \ No newline at end of file