#region License // Copyright 2005-2019 Paul Kohler (https://github.com/paulkohler/minisqlquery). All rights reserved. // This source code is made available under the terms of the GNU Lesser General Public License v3.0 // https://github.com/paulkohler/minisqlquery/blob/master/LICENSE #endregion using System; using System.IO; using MiniSqlQuery.Core.DbModel; using NUnit.Framework; // ReSharper disable InconsistentNaming namespace MiniSqlQuery.Tests.DbModel { [TestFixture(Description = "Requires SQLCE DB")] [Category("Functional")] // todo - build db model manually for unit test to remove db dependency public class SqlWriterTests { #region Setup/Teardown [SetUp] public void TestSetup() { _service = new SqlCeSchemaService { ProviderName = _providerName }; _model = _service.GetDbObjectModel(_connStr); _sqlSW = new StringWriter(); _sqlWriter = new SqlWriter(); } #endregion private SqlCeSchemaService _service; private string _connStr = @"data source=|DataDirectory|\sqlce-test.v4.sdf"; private string _providerName = "System.Data.SqlServerCe.4.0"; private DbModelInstance _model; ISqlWriter _sqlWriter; StringWriter _sqlSW; [Test] public void will_render_sql_with_types_and_nullability() { var table = _model.FindTable("[Person]"); // build sql sample... _sqlWriter.WriteCreate(_sqlSW, table.Columns[0]); _sqlSW.WriteLine(","); _sqlWriter.WriteCreate(_sqlSW, table.Columns[2]); Assert.That(_sqlSW.ToString(), Is.EqualTo("ID int not null,\r\nName nvarchar(100) not null")); } [Test] public void will_render_sql_WriteSummary() { var table = _model.FindTable("[Person]"); _sqlWriter.WriteSummary(_sqlSW, table.Columns[0]); Assert.That(_sqlSW.ToString(), Is.EqualTo("ID (int not null)")); _sqlSW = new StringWriter(); _sqlWriter.WriteSummary(_sqlSW, table.Columns[2]); Assert.That(_sqlSW.ToString(), Is.EqualTo("Name (nvarchar(100) not null)")); } [Test] public void will_render_sql_select_for_Person() { var table = _model.FindTable("[Person]"); _sqlWriter.WriteSelect(_sqlSW, table); Assert.That(_sqlSW.ToString(), Is.EqualTo(@"SELECT ID, StaffUnitID, Name, DOB FROM [Person] ")); } [Test] public void will_render_sql_select_COUNT_for_Person() { var table = _model.FindTable("[Person]"); _sqlWriter.WriteSelectCount(_sqlSW, table); Assert.That(_sqlSW.ToString().Replace(Environment.NewLine, ""), Is.EqualTo(@"SELECT COUNT(*) FROM [Person]")); } [Test] public void will_render_insert_sql_for_StaffUnit() { var table = _model.FindTable("[StaffUnit]"); _sqlWriter.WriteInsert(_sqlSW, table); Console.WriteLine(_sqlSW.ToString()); Assert.That(_sqlSW.ToString(), Is.EqualTo(@"INSERT INTO [StaffUnit] (Name, Description) VALUES (N'' /*Name,nvarchar(100)*/, null /*Description,nvarchar(500)*/) ")); } [Test] public void will_render_insert_sql_for_StaffUnit_including_PK() { _sqlWriter.IncludeReadOnlyColumnsInExport = true; var table = _model.FindTable("[StaffUnit]"); _sqlWriter.WriteInsert(_sqlSW, table); Console.WriteLine(_sqlSW.ToString()); Assert.That(_sqlSW.ToString(), Is.EqualTo(@"INSERT INTO [StaffUnit] (ID, Name, Description) VALUES (0 /*ID,int*/, N'' /*Name,nvarchar(100)*/, null /*Description,nvarchar(500)*/) ")); } [Test] public void will_render_update_sql_for_StaffUnit() { var table = _model.FindTable("[StaffUnit]"); _sqlWriter.WriteUpdate(_sqlSW, table); Console.WriteLine(_sqlSW.ToString()); Assert.That(_sqlSW.ToString(), Is.EqualTo(@"UPDATE [StaffUnit] SET Name = N'', Description = null WHERE ID = /*value:ID,int*/ ")); } [Test] public void will_render_delete_sql_for_StaffUnit() { var table = _model.FindTable("[StaffUnit]"); _sqlSW = new StringWriter(); _sqlWriter.WriteDelete(_sqlSW, table); //Console.WriteLine(sql.ToString()); Assert.That(_sqlSW.ToString(), Is.EqualTo(@"DELETE FROM [StaffUnit] WHERE ID = /*value:ID*/ ")); } } }