public static async Task TryAddAsync_ValidSongDirector_Succeeds(
        string awsRegionSystemName,
        bool useDynamoDBLocal,
        string fullName,
        string emailAddress,
        string phoneNumber,
        string rankName,
        bool isActive)
    {
        // Arrange

        SongDirector songDirector = SongDirector
                                    .TryCreate(fullName, emailAddress, phoneNumber, rankName, isActive)
                                    .Value;

        AggregateSongDirectorRepository aggregateSongDirectorRepository =
            GetAggregateSongDirectorRepository(awsRegionSystemName, useDynamoDBLocal);

        // Act

        Result <SongDirector> addResult = await aggregateSongDirectorRepository
                                          .TryAddAsync(songDirector)
                                          .ConfigureAwait(false);

        // Assert

        Assert.True(addResult.IsSuccess);

        Console.WriteLine(addResult.Value.Id);
    }
    public static async Task TryUpdateAsync_ExistingSongDirector_Succeeds(
        string awsRegionSystemName,
        bool useDynamoDBLocal,
        string songDirectorId,
        string fullName,
        string emailAddress,
        string phoneNumber,
        string rankName,
        bool isActive)
    {
        // Arrange

        SongDirector songDirector = SongDirector
                                    .TryCreate(fullName, emailAddress, phoneNumber, rankName, isActive)
                                    .Value;

        songDirector.UpdateId(songDirectorId);

        AggregateSongDirectorRepository aggregateSongDirectorRepository =
            GetAggregateSongDirectorRepository(awsRegionSystemName, useDynamoDBLocal);

        // Act

        Result updateResult = await aggregateSongDirectorRepository
                              .TryUpdateAsync(songDirector)
                              .ConfigureAwait(false);

        // Assert

        Assert.True(updateResult.IsSuccess);
    }
    public static async Task TryRemoveByIdAsync_ExistingSongDirector_Succeeds(
        string awsRegionSystemName, bool useDynamoDBLocal, string songDirectorId)
    {
        // Arrange

        AggregateSongDirectorRepository aggregateSongDirectorRepository =
            GetAggregateSongDirectorRepository(awsRegionSystemName, useDynamoDBLocal);

        // Act

        Result removeByIdResult = await aggregateSongDirectorRepository
                                  .TryRemoveByIdAsync(songDirectorId)
                                  .ConfigureAwait(false);

        // Assert

        Assert.True(removeByIdResult.IsSuccess);
    }
    public static async Task TryGetAllAsync(
        string awsRegionSystemName,
        bool useDynamoDBLocal,
        int expectedSongDirectorCount)
    {
        // Arrange

        AggregateSongDirectorRepository aggregateSongDirectorRepository =
            GetAggregateSongDirectorRepository(awsRegionSystemName, useDynamoDBLocal);

        // Act

        Result <IEnumerable <SongDirector> > getAllResult = await aggregateSongDirectorRepository
                                                            .TryGetAllAsync()
                                                            .ConfigureAwait(false);

        // Assert

        Assert.Equal(expectedSongDirectorCount, getAllResult.Value.Count());
    }
    public static async Task TryFindPropertyById_Rank_ReturnsExpectedRankName(
        string awsRegionSystemName,
        bool useDynamoDBLocal,
        string songDirectorId,
        string expectedRankName)
    {
        // Arrange

        string propertyName = "Rank";

        AggregateSongDirectorRepository aggregateSongDirectorRepository =
            GetAggregateSongDirectorRepository(awsRegionSystemName, useDynamoDBLocal);

        // Act

        Result <Rank?> getRankResult = await aggregateSongDirectorRepository
                                       .TryFindPropertyByIdAsync <Rank?>(songDirectorId, propertyName)
                                       .ConfigureAwait(false);

        // Assert

        Assert.Equal(expectedRankName, getRankResult.Value?.Name);
    }