/// <summary> /// Initializes a new instance of the <see cref="DatabaseTrigger"/> class. /// </summary> /// <param name="name">The name.</param> /// <param name="definition">The definition.</param> /// <param name="queryTiming">The query timing.</param> /// <param name="events">The events.</param> /// <param name="isEnabled">if set to <c>true</c> [is enabled].</param> /// <exception cref="ArgumentNullException"><paramref name="name"/> is <c>null</c>, or <paramref name="definition"/> is <c>null, empty, or whitespace</c>.</exception> /// <exception cref="ArgumentException">If invalid enum values are provided for <paramref name="queryTiming"/> or <paramref name="events"/>. Additionally this will be thrown when provided a <paramref name="events"/> value of <see cref="TriggerEvent.None"/>.</exception> public DatabaseTrigger(Identifier name, string definition, TriggerQueryTiming queryTiming, TriggerEvent events, bool isEnabled) { if (name == null) { throw new ArgumentNullException(nameof(name)); } if (definition.IsNullOrWhiteSpace()) { throw new ArgumentNullException(nameof(definition)); } if (!queryTiming.IsValid()) { throw new ArgumentException($"The { nameof(TriggerQueryTiming) } provided must be a valid enum.", nameof(queryTiming)); } if (!events.IsValid()) { throw new ArgumentException($"The { nameof(TriggerEvent) } provided must be a valid enum.", nameof(events)); } if (events == TriggerEvent.None) { throw new ArgumentException("Invalid trigger event flags given. Must include at least one event, e.g. INSERT, DELETE, UPDATE.", nameof(events)); } Name = name.LocalName; Definition = definition; QueryTiming = queryTiming; TriggerEvent = events; IsEnabled = isEnabled; }
public static void Ctor_GivenNullName_ThrowsArgumentNullException() { const string definition = "create trigger test_trigger..."; const TriggerQueryTiming timing = TriggerQueryTiming.Before; const TriggerEvent events = TriggerEvent.Update; Assert.That(() => new DatabaseTrigger(null, definition, timing, events, true), Throws.ArgumentNullException); }
public static void Ctor_GivenNullOrWhiteSpaceDefinition_ThrowsArgumentNullException(string definition) { Identifier triggerName = "test_trigger"; const TriggerQueryTiming timing = TriggerQueryTiming.Before; const TriggerEvent events = TriggerEvent.Update; Assert.That(() => new DatabaseTrigger(triggerName, definition, timing, events, true), Throws.ArgumentNullException); }
public static void Ctor_GivenInvalidTriggerEvent_ThrowsArgumentException() { Identifier triggerName = "test_trigger"; const string definition = "create trigger test_trigger..."; const TriggerQueryTiming timing = TriggerQueryTiming.InsteadOf; const TriggerEvent events = (TriggerEvent)55; Assert.That(() => new MySqlDatabaseTrigger(triggerName, definition, timing, events), Throws.ArgumentException); }
public static void Ctor_GivenNoTriggerEvents_ThrowsArgumentException() { Identifier triggerName = "test_trigger"; const string definition = "create trigger test_trigger..."; const TriggerQueryTiming timing = TriggerQueryTiming.Before; const TriggerEvent events = TriggerEvent.None; Assert.That(() => new DatabaseTrigger(triggerName, definition, timing, events, true), Throws.ArgumentException); }
public static void Ctor_GivenNullOrWhiteSpaceDefinition_ThrowsArgumentNullException(string definition) { Identifier triggerName = "test_trigger"; const TriggerQueryTiming timing = TriggerQueryTiming.InsteadOf; const TriggerEvent events = TriggerEvent.Update; const bool enabled = true; Assert.That(() => new PostgreSqlDatabaseTrigger(triggerName, definition, timing, events, enabled), Throws.ArgumentNullException); }
public static void Ctor_GivenNullName_ThrowsArgumentNullException() { const string definition = "create trigger test_trigger..."; const TriggerQueryTiming timing = TriggerQueryTiming.InsteadOf; const TriggerEvent events = TriggerEvent.Update; const bool enabled = true; Assert.That(() => new PostgreSqlDatabaseTrigger(null, definition, timing, events, enabled), Throws.ArgumentNullException); }
public static void Ctor_GivenNoTriggerEvents_ThrowsArgumentException() { Identifier triggerName = "test_trigger"; const string definition = "create trigger test_trigger..."; const TriggerQueryTiming timing = TriggerQueryTiming.InsteadOf; const TriggerEvent events = TriggerEvent.None; const bool enabled = true; Assert.That(() => new PostgreSqlDatabaseTrigger(triggerName, definition, timing, events, enabled), Throws.ArgumentException); }
public static void IsEnabled_PropertyGet_ReturnsTrue() { Identifier triggerName = "test_trigger"; const string definition = "create trigger test_trigger..."; const TriggerQueryTiming timing = TriggerQueryTiming.Before; const TriggerEvent events = TriggerEvent.Update; var trigger = new SqliteDatabaseTrigger(triggerName, definition, timing, events); Assert.That(trigger.IsEnabled, Is.True); }
public static void QueryTiming_PropertyGet_EqualsCtorArg() { Identifier triggerName = "test_trigger"; const string definition = "create trigger test_trigger..."; const TriggerQueryTiming timing = TriggerQueryTiming.Before; const TriggerEvent events = TriggerEvent.Update; var trigger = new DatabaseTrigger(triggerName, definition, timing, events, true); Assert.That(trigger.QueryTiming, Is.EqualTo(timing)); }
public static void Definition_PropertyGet_EqualsCtorArg() { Identifier triggerName = "test_trigger"; const string definition = "create trigger test_trigger..."; const TriggerQueryTiming timing = TriggerQueryTiming.InsteadOf; const TriggerEvent events = TriggerEvent.Update; var trigger = new MySqlDatabaseTrigger(triggerName, definition, timing, events); Assert.That(trigger.Definition, Is.EqualTo(definition)); }
public static void IsEnabled_WhenFalseProvidedInCtor_ReturnsFalse() { Identifier triggerName = "test_trigger"; const string definition = "create trigger test_trigger..."; const TriggerQueryTiming timing = TriggerQueryTiming.Before; const TriggerEvent events = TriggerEvent.Update; var trigger = new DatabaseTrigger(triggerName, definition, timing, events, false); Assert.That(trigger.IsEnabled, Is.False); }
public static void QueryTiming_PropertyGet_EqualsCtorArg() { Identifier triggerName = "test_trigger"; const string definition = "create trigger test_trigger..."; const TriggerQueryTiming timing = TriggerQueryTiming.InsteadOf; const TriggerEvent events = TriggerEvent.Update; const bool enabled = true; var trigger = new PostgreSqlDatabaseTrigger(triggerName, definition, timing, events, enabled); Assert.That(trigger.QueryTiming, Is.EqualTo(timing)); }
public static void ToString_WhenInvoked_ReturnsExpectedValues(string name, string expectedResult) { var triggerName = Identifier.CreateQualifiedIdentifier(name); const string definition = "create trigger test_trigger..."; const TriggerQueryTiming timing = TriggerQueryTiming.Before; const TriggerEvent events = TriggerEvent.Update; var trigger = new PostgreSqlDatabaseTrigger(triggerName, definition, timing, events, false); var result = trigger.ToString(); Assert.That(result, Is.EqualTo(expectedResult)); }
/// <summary> /// Initializes a new instance of the <see cref="ParsedTriggerData"/> class. /// </summary> /// <param name="queryTiming">A query timing.</param> /// <param name="events">Trigger events.</param> /// <exception cref="ArgumentException"><paramref name="queryTiming"/> or <paramref name="events"/> are invalid enum values.</exception> public ParsedTriggerData(TriggerQueryTiming queryTiming, TriggerEvent events) { if (!queryTiming.IsValid()) { throw new ArgumentException($"The { nameof(TriggerQueryTiming) } provided must be a valid enum.", nameof(queryTiming)); } if (!events.IsValid()) { throw new ArgumentException($"The { nameof(TriggerEvent) } provided must be a valid enum.", nameof(events)); } Timing = queryTiming; Event = events; }
public async Task Triggers_GivenTableWithTriggerForDelete_ReturnsCorrectEventAndTiming() { var table = await GetTableAsync("v11_trigger_test_table_1").ConfigureAwait(false); var trigger = table.Triggers.First(t => t.Name == "v11_trigger_test_table_1_trigger_3"); const TriggerQueryTiming timing = TriggerQueryTiming.Before; const TriggerEvent events = TriggerEvent.Delete; Assert.Multiple(() => { Assert.That(trigger.QueryTiming, Is.EqualTo(timing)); Assert.That(trigger.TriggerEvent, Is.EqualTo(events)); }); }
public async Task Triggers_GivenTableWithTriggerAfterUpdate_ReturnsCorrectEventAndTiming() { var table = await GetTableAsync("trigger_test_table_1").ConfigureAwait(false); var trigger = table.Triggers.First(t => t.Name == "TRIGGER_TEST_TABLE_1_TRIGGER_5"); const TriggerQueryTiming timing = TriggerQueryTiming.After; const TriggerEvent events = TriggerEvent.Update; Assert.Multiple(() => { Assert.That(trigger.QueryTiming, Is.EqualTo(timing)); Assert.That(trigger.TriggerEvent, Is.EqualTo(events)); }); }
public Trigger( Identifier tableName, Identifier triggerName, string definition, TriggerQueryTiming queryTiming, TriggerEvent triggerEvent ) { if (tableName == null) { throw new ArgumentNullException(nameof(tableName)); } if (triggerName == null) { throw new ArgumentNullException(nameof(triggerName)); } if (definition.IsNullOrWhiteSpace()) { throw new ArgumentNullException(nameof(definition)); } TriggerName = triggerName.LocalName; Definition = definition; TriggerUrl = "../" + UrlRouter.GetTriggerUrl(tableName, triggerName); var queryFlags = queryTiming.GetFlags() .Select(qt => TimingDescriptions[qt]) .OrderBy(qt => qt) .ToList(); var eventFlags = triggerEvent.GetFlags() .Select(te => EventDescriptions[te]) .OrderBy(te => te) .ToList(); QueryTiming = queryFlags.Join(", "); Events = eventFlags.Join(", "); }
public Trigger( Identifier tableName, Identifier triggerName, string rootPath, string definition, TriggerQueryTiming queryTiming, TriggerEvent triggerEvent ) { if (tableName == null) { throw new ArgumentNullException(nameof(tableName)); } if (triggerName == null) { throw new ArgumentNullException(nameof(triggerName)); } Name = triggerName.ToVisibleName(); TableName = tableName.ToVisibleName(); TableUrl = rootPath + UrlRouter.GetTableUrl(tableName); TriggerUrl = rootPath + UrlRouter.GetTriggerUrl(tableName, triggerName); RootPath = rootPath ?? throw new ArgumentNullException(nameof(rootPath)); Definition = definition ?? throw new ArgumentNullException(nameof(definition)); var queryFlags = queryTiming.GetFlags() .Select(qt => TimingDescriptions[qt]) .OrderBy(qt => qt) .ToList(); var eventFlags = triggerEvent.GetFlags() .Select(te => EventDescriptions[te]) .OrderBy(te => te) .ToList(); QueryTiming = queryFlags.Join(", "); Events = eventFlags.Join(", "); }