public void ForeignKeyCopiedFromAutoPrimaryKey_InCorrectOrder_Test() { // Arrange var primaryTable = new PrimaryTable(); var primaryRecordReference = new RecordReference<PrimaryTable>(Helpers.GetTypeGeneratorMock(primaryTable).Object, this.attributeDecorator); primaryRecordReference.Populate(); var foreignTable = new ForeignTable(); var foreignRecordReference = new RecordReference<ForeignTable>(Helpers.GetTypeGeneratorMock(foreignTable).Object, this.attributeDecorator); foreignRecordReference.Populate(); foreignRecordReference.AddPrimaryRecordReference(primaryRecordReference); var expected = new object[] {"Key", 1, "Guid", Guid.NewGuid(), "Key", 2}; this.writePrimitivesMock.Setup(m => m.Execute()).Returns(expected); // Act // Note the foreign key record is being passed in before the primary key record. // This is to test that the primary key record that wrote first gets the first return // data element and the foreign key record gets the subsequent one. this.persistence.Persist(new RecordReference[] { foreignRecordReference, primaryRecordReference }); // Assert Assert.AreEqual(expected[1], primaryTable.Key); Assert.AreEqual(expected[5], foreignTable.Key); }
public void Persists_KeyMapping_Test() { // Arrange var primaryTable = new ManualKeyPrimaryTable { Key1 = "ABCD", Key2 = 5 }; var primaryReference = new RecordReference<ManualKeyPrimaryTable>(Helpers.GetTypeGeneratorMock(primaryTable).Object, this.attributeDecorator); var foreignTable = new ManualKeyForeignTable(); var foreignReference = new RecordReference<ManualKeyForeignTable>(Helpers.GetTypeGeneratorMock(foreignTable).Object, this.attributeDecorator); foreignReference.AddPrimaryRecordReference(primaryReference); var deferredValueGeneratorMock = new Mock<IDeferredValueGenerator<LargeInteger>>(); var persistence = new MemoryPersistence(deferredValueGeneratorMock.Object, this.attributeDecorator); // Act primaryReference.Populate(); foreignReference.Populate(); persistence.Persist(new RecordReference[] { primaryReference, foreignReference}); // Assert Assert.AreEqual(primaryTable.Key1, foreignTable.ForeignKey1); Assert.AreEqual(primaryTable.Key2, foreignTable.ForeignKey2); }
public void ForeignKeysCopiedFromManualPrimaryKeys_Test() { // Arrange var primaryTable = new ManualKeyPrimaryTable {Key1 = "A", Key2 = 7}; var foreignTable = new ManualKeyForeignTable(); var primaryRecordReference = new RecordReference<ManualKeyPrimaryTable>(Helpers.GetTypeGeneratorMock(primaryTable).Object, this.attributeDecorator); primaryRecordReference.Populate(); var foreignRecordReference = new RecordReference<ManualKeyForeignTable>(Helpers.GetTypeGeneratorMock(foreignTable).Object, this.attributeDecorator); foreignRecordReference.Populate(); foreignRecordReference.AddPrimaryRecordReference(primaryRecordReference); const string catalogueName = "catABC"; const string schema = "schemaABC"; const string tableName = "ABCD"; var columns = new List<List<Column>>(); this.writePrimitivesMock.Setup(m => m.Insert(catalogueName, schema, tableName, It.IsAny<IEnumerable<Column>>())) .Callback<string, string, string, IEnumerable<Column>>((cat, s, t, col) => columns.Add(col.ToList())); // Act this.persistence.Persist(new RecordReference[] { foreignRecordReference, primaryRecordReference }); // Assert Assert.AreEqual(primaryTable.Key1, foreignTable.ForeignKey1); Assert.AreEqual(primaryTable.Key2, foreignTable.ForeignKey2); }
public void InsertsInProperOrder_Test() { // Arrange var primaryTable = new PrimaryTable { Integer = 1}; var primaryRecordReference = new RecordReference<PrimaryTable>(Helpers.GetTypeGeneratorMock(primaryTable).Object, this.attributeDecorator); primaryRecordReference.Populate(); var foreignTable = new ForeignTable {Integer = 1}; var foreignRecordReference = new RecordReference<ForeignTable>(Helpers.GetTypeGeneratorMock(foreignTable).Object, this.attributeDecorator); foreignRecordReference.Populate(); foreignRecordReference.AddPrimaryRecordReference(primaryRecordReference); var columns = new List<List<Column>>(); this.writePrimitivesMock.Setup(m => m.Insert(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<string>(), It.IsAny<IEnumerable<Column>>())) .Callback<string, string, string, IEnumerable<Column>>((cat, s, t, col) => columns.Add(col.ToList())); this.writePrimitivesMock.Setup(m => m.SelectIdentity(It.IsAny<string>())).Returns(new Variable(null)); this.writePrimitivesMock.Setup(m => m.Execute()).Returns(new object[] {"Key", 0, "Guid", Guid.NewGuid(), "Key", 0}); // Act // Note the foreign key record is being passed in before the primary key record // to test that the primary key record writes first regardless which insert operation's // Write method is called. this.persistence.Persist(new RecordReference[] { foreignRecordReference, primaryRecordReference}); // Assert Assert.AreEqual(primaryTable.Integer, columns[0].First(c => c.Name == "Integer").Value); Assert.AreEqual(foreignTable.Integer, columns[1].First(c => c.Name == "Integer").Value); }