Skip to content

Commit

Permalink
Do not call GETRESOURCEHEADER on session-based layers when validating.
Browse files Browse the repository at this point in the history
Fixes #58
  • Loading branch information
jumpinjackie committed Jan 30, 2018
1 parent 15906cf commit aeccd98
Show file tree
Hide file tree
Showing 3 changed files with 47 additions and 1 deletion.
43 changes: 43 additions & 0 deletions OSGeo.MapGuide.MaestroAPI.Tests/ValidationTests.cs
Expand Up @@ -1262,6 +1262,49 @@ public void TestCase_LayerValidator_MissingDrawingSheetLayer()
Assert.Equal(ValidationStatusCode.Error_LayerDefinition_DrawingSourceSheetLayerNotFound, issues.First().StatusCode);
}

[Fact]
public void TestCase_LayerValidator_DoesNotGetResourceHeaderForSessionBasedLayers()
{
var resId = "Library://Test.FeatureSource";
var ldfId = $"Session:{Guid.NewGuid().ToString()}//Test.LayerDefinition";
var schemaName = "Default";
var className = "Test";
var idName = "ID";
var geomName = "Geometry";
var klass = CreateTestClass("Default", className, idName, geomName);

var fs = ObjectFactory.CreateFeatureSource("OSGeo.SDF");
fs.ResourceID = resId;

var ldf = ObjectFactory.CreateDefaultLayer(LayerType.Vector, new Version(1, 0, 0));
ldf.SubLayer.ResourceId = resId;
ldf.ResourceID = ldfId;
var vl = (IVectorLayerDefinition)ldf.SubLayer;
vl.FeatureName = $"{schemaName}:{klass.Name}";
vl.Geometry = geomName;

var mockConn = new Mock<IServerConnection>();
var mockFeatSvc = new Mock<IFeatureService>();
var mockResSvc = new Mock<IResourceService>();

mockResSvc.Setup(rsvc => rsvc.GetResource(It.Is<string>(arg => arg == resId))).Returns(fs);

mockFeatSvc.Setup(fsvc => fsvc.TestConnection(It.Is<string>(arg => arg == resId))).Returns("false");
mockFeatSvc.Setup(fsvc => fsvc.GetSchemas(It.Is<string>(arg => arg == resId))).Returns(new[] { schemaName });
mockFeatSvc.Setup(fsvc => fsvc.GetClassDefinition(It.Is<string>(arg => arg == resId), It.Is<string>(arg => arg == $"{schemaName}:{className}"))).Returns(klass);

mockConn.Setup(c => c.FeatureService).Returns(mockFeatSvc.Object);
mockConn.Setup(c => c.ResourceService).Returns(mockResSvc.Object);

var context = new ResourceValidationContext(mockConn.Object);
var validator = CreateInstance<LayerDefinitionValidator>();
validator.Connection = mockConn.Object;
var issues = validator.Validate(context, ldf, false);
Assert.Empty(issues);

mockResSvc.Verify(r => r.GetResourceHeader(It.IsAny<string>()), Times.Never);
}

[Fact]
public void TestCase_MapDefinitionValidator_EmptyCS()
{
Expand Down
Expand Up @@ -83,7 +83,9 @@ protected ValidationIssue[] ValidateBase(ResourceValidationContext context, IRes

List<ValidationIssue> issues = new List<ValidationIssue>();

var header = context.Connection.ResourceService.GetResourceHeader(resource.ResourceID);
var header = ResourceIdentifier.IsSessionBased(resource.ResourceID)
? null
: context.Connection.ResourceService.GetResourceHeader(resource.ResourceID);
var meta = header?.Metadata?.Simple;

if (meta != null)
Expand Down
1 change: 1 addition & 0 deletions OSGeo.MapGuide.MaestroAPI/Services/IResourceService.cs
Expand Up @@ -135,6 +135,7 @@ public interface IResourceService : IService
/// <summary>
/// Gets the document header of the specified resource
/// </summary>
/// <remarks>This operation does not work with session-based resources.</remarks>
/// <param name="resourceID"></param>
/// <returns></returns>
ObjCommon.ResourceDocumentHeaderType GetResourceHeader(string resourceID);
Expand Down

0 comments on commit aeccd98

Please sign in to comment.