Skip to content

Commit

Permalink
Use case insensitive lookup for some dictionaries
Browse files Browse the repository at this point in the history
Fixes #286
  • Loading branch information
odinserj committed Jan 27, 2015
1 parent 530db5e commit fcf9290
Show file tree
Hide file tree
Showing 3 changed files with 50 additions and 7 deletions.
6 changes: 5 additions & 1 deletion src/Hangfire.SqlServer/SqlServerConnection.cs
Original file line number Diff line number Diff line change
Expand Up @@ -200,11 +200,15 @@ public StateData GetStateData(string jobId)
return null;
}

var data = new Dictionary<string, string>(
JobHelper.FromJson<Dictionary<string, string>>(sqlState.Data),
StringComparer.OrdinalIgnoreCase);

return new StateData
{
Name = sqlState.Name,
Reason = sqlState.Reason,
Data = JobHelper.FromJson<Dictionary<string, string>>(sqlState.Data)
Data = data
};
}

Expand Down
9 changes: 7 additions & 2 deletions src/Hangfire.SqlServer/SqlServerMonitoringApi.cs
Original file line number Diff line number Diff line change
Expand Up @@ -286,7 +286,9 @@ public JobDetailsDto JobDetails(string jobId)
StateName = x.Name,
CreatedAt = x.CreatedAt,
Reason = x.Reason,
Data = JobHelper.FromJson<Dictionary<string, string>>(x.Data)
Data = new Dictionary<string, string>(
JobHelper.FromJson<Dictionary<string, string>>(x.Data),
StringComparer.OrdinalIgnoreCase)
})
.ToList();
Expand Down Expand Up @@ -549,7 +551,10 @@ private static Job DeserializeJob(string invocationData, string arguments)

foreach (var job in jobs)
{
var stateData = JobHelper.FromJson<Dictionary<string, string>>(job.StateData);
var stateData = new Dictionary<string, string>(
JobHelper.FromJson<Dictionary<string, string>>(job.StateData),
StringComparer.OrdinalIgnoreCase);

var dto = selector(job, DeserializeJob(job.InvocationData, job.Arguments), stateData);

result.Add(new KeyValuePair<string, TDto>(
Expand Down
42 changes: 38 additions & 4 deletions tests/Hangfire.SqlServer.Tests/SqlServerConnectionFacts.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,18 +16,17 @@ namespace Hangfire.SqlServer.Tests
public class SqlServerConnectionFacts
{
private readonly Mock<IPersistentJobQueue> _queue;
private readonly Mock<IPersistentJobQueueProvider> _provider;
private readonly PersistentJobQueueProviderCollection _providers;

public SqlServerConnectionFacts()
{
_queue = new Mock<IPersistentJobQueue>();

_provider = new Mock<IPersistentJobQueueProvider>();
_provider.Setup(x => x.GetJobQueue(It.IsNotNull<IDbConnection>()))
var provider = new Mock<IPersistentJobQueueProvider>();
provider.Setup(x => x.GetJobQueue(It.IsNotNull<IDbConnection>()))
.Returns(_queue.Object);

_providers = new PersistentJobQueueProviderCollection(_provider.Object);
_providers = new PersistentJobQueueProviderCollection(provider.Object);
}

[Fact]
Expand Down Expand Up @@ -301,6 +300,41 @@ public void GetStateData_ReturnsCorrectData()
});
}

[Fact, CleanDatabase]
public void GetStateData_ReturnsCorrectData_WhenPropertiesAreCamelcased()
{
const string arrangeSql = @"
insert into HangFire.Job (InvocationData, Arguments, StateName, CreatedAt)
values ('', '', '', getutcdate());
declare @JobId int;
set @JobId = scope_identity();
insert into HangFire.State (JobId, Name, CreatedAt)
values (@JobId, 'old-state', getutcdate());
insert into HangFire.State (JobId, Name, Reason, Data, CreatedAt)
values (@JobId, @name, @reason, @data, getutcdate());
declare @StateId int;
set @StateId = scope_identity();
update HangFire.Job set StateId = @StateId;
select @JobId as Id;";

UseConnections((sql, connection) =>
{
var data = new Dictionary<string, string>
{
{ "key", "Value" }
};
var jobId = (int)sql.Query(
arrangeSql,
new { name = "Name", reason = "Reason", @data = JobHelper.ToJson(data) }).Single().Id;
var result = connection.GetStateData(jobId.ToString());
Assert.NotNull(result);
Assert.Equal("Value", result.Data["Key"]);
});
}

[Fact, CleanDatabase]
public void GetJobData_ReturnsJobLoadException_IfThereWasADeserializationException()
{
Expand Down

0 comments on commit fcf9290

Please sign in to comment.