Skip to content

Commit

Permalink
Update Snowflake datasource / datasource item features, test and exam…
Browse files Browse the repository at this point in the history
…ples
  • Loading branch information
vulh-infragistics committed Dec 6, 2024
1 parent a6a9d36 commit 14dd37b
Show file tree
Hide file tree
Showing 8 changed files with 223 additions and 25 deletions.
57 changes: 57 additions & 0 deletions e2e/Sandbox/DashboardCreators/SnowFlakeDashboard.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
using Reveal.Sdk.Dom;
using Reveal.Sdk.Dom.Data;
using Reveal.Sdk.Dom.Visualizations;
using Sandbox.DashboardFactories;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Sandbox.DashboardCreators
{
internal class SnowflakeDashboard : IDashboardCreator
{
public string Name => "Snowflake Dashboard";

public RdashDocument CreateDashboard()
{
var snowflakeDS = new SnowflakeDataSource()
{
Id = "SnowflakeDSId",
Title = "Snowflake Data source",
Subtitle = "Snowflake Subtitle",
Account = "pqwkobs-xb90908",
DefaultRefreshRate = "120",
Host = "gpiskyj-al16914.snowflakecomputing.com",
Database = "SNOWFLAKE_SAMPLE_DATA",
//Role
Warehouse = "COMPUTE_WH",
Schema = "TPCDS_SF100TCL"
};

var snowflakeDSI = new SnowflakeDataSourceItem("Snowflake DSI Title", snowflakeDS)
{
Id = "SnowflakeDSItemId",
Title = "Snowflake data source Item",
Subtitle = "Snowflake data source Item Subtitle",
CustomQuery = "Select O_ORDERKEY, O_ORDERPRIORITY, O_CUSTKEY from ORDERS",
Schema = "TPCH_SF10",
Table = "ORDERS",
Database = "SNOWFLAKE_SAMPLE_DATA",
Fields = new List<IField>
{
new NumberField("O_ORDERKEY"),
new NumberField("O_CUSTKEY"),
new TextField("O_ORDERPRIORITY"),
}
};

var document = new RdashDocument("Snowflake Dashboard");

document.Visualizations.Add(new PieChartVisualization("Snowflake Order Priorities", snowflakeDSI)
.SetLabel("O_ORDERPRIORITY").SetValues("O_CUSTKEY"));
return document;
}
}
}
4 changes: 3 additions & 1 deletion e2e/Sandbox/MainWindow.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
using Reveal.Sdk.Data.Rest;
using Reveal.Sdk.Data.Snowflake;
using Reveal.Sdk.Dom;
using Sandbox.DashboardCreators;
using Sandbox.DashboardFactories;
using Sandbox.RevealSDK;
using System;
Expand Down Expand Up @@ -51,6 +52,7 @@ public partial class MainWindow : Window
new RestDataSourceDashboard(),
new SalesDashboard(),
new SqlServerDataSourceDashboards(),
new SnowflakeDashboard(),
};

public MainWindow()
Expand All @@ -59,7 +61,7 @@ public MainWindow()

RevealSdkSettings.DataSourceProvider = new Sandbox.RevealSDK.DataSourceProvider();
RevealSdkSettings.AuthenticationProvider = new AuthenticationProvider();
RevealSdkSettings.DataSources.RegisterMicrosoftSqlServer().RegisterMicrosoftAnalysisServices();
RevealSdkSettings.DataSources.RegisterMicrosoftSqlServer().RegisterMicrosoftAnalysisServices().RegisterSnowflake();

LoadDashboards();

Expand Down
5 changes: 5 additions & 0 deletions e2e/Sandbox/Reveal/AuthenticationProvider.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
using Reveal.Sdk.Data;
using Reveal.Sdk.Data.Microsoft.AnalysisServices;
using Reveal.Sdk.Data.Microsoft.SqlServer;
using Reveal.Sdk.Data.Snowflake;
using System.Threading.Tasks;

namespace Sandbox.RevealSDK
Expand All @@ -18,6 +19,10 @@ public Task<IRVDataSourceCredential> ResolveCredentialsAsync(RVDashboardDataSour
{
userCredential = new RVUsernamePasswordDataSourceCredential("username", "password", "domain");
}
else if (dataSource is RVSnowflakeDataSource)
{
userCredential = new RVUsernamePasswordDataSourceCredential("snow-flake-username", "snow-flake-password");
}
return Task.FromResult(userCredential);
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
using Reveal.Sdk.Dom.Core.Extensions;
using Newtonsoft.Json.Linq;
using Reveal.Sdk.Dom.Core.Constants;
using Reveal.Sdk.Dom.Core.Extensions;
using Reveal.Sdk.Dom.Data;
using Xunit;

Expand All @@ -7,49 +9,107 @@ namespace Reveal.Sdk.Dom.Tests.Data.DataSourceItems
public class SnowflakeDataSourceItemFixture
{
[Theory]
[InlineData("Test Item")]
[InlineData(null)]
public void Constructor_SetsTitleAndDataSource_WhenCalled(string title)
[InlineData("DS Title", "DS Title", "DSI Title", "DSI Title")]
[InlineData(null, "DSI Title", "DSI Title", "DSI Title")]
public void Constructor_CreateSnowFlakeDSI_WithTitleAndDataSource(string dsTitle, string expectedDSTitle, string dsiTitle, string expectedDSITitle)
{
// Arrange
var dataSource = new SnowflakeDataSource();
var dataSource = new DataSource() { Title = dsTitle };

// Act
var item = new SnowflakeDataSourceItem(title, dataSource);
var item = new SnowflakeDataSourceItem(dsiTitle, dataSource);

// Assert
Assert.Equal(title, item.Title);
Assert.Equal(dataSource, item.DataSource);
Assert.Equal(SchemaTypeNames.DataSourceItemType, item.SchemaTypeName);
Assert.Equal(expectedDSTitle, item.DataSource.Title);
Assert.Equal(dataSource.Id, item.DataSource.Id);
Assert.Equal(dataSource.Id, item.DataSourceId);
Assert.IsType<SnowflakeDataSource>(item.DataSource);
Assert.NotSame(dataSource, item.DataSource);
Assert.Equal(expectedDSITitle, item.Title);
}

[Theory]
[InlineData("Test Item")]
[InlineData(null)]
public void Constructor_SetsTitleAndDataSource_WhenConstructedWithGenericDataSource(string title)
[InlineData("DS Title", "DS Title", "DSI Title", "DSI Title")]
[InlineData(null, "DSI Title", "DSI Title", "DSI Title")]
public void Constructor_CreateSnowFlakeDSI_WithTitleAndSnowFlakeDataSource(string dsTitle, string expectedDSTitle, string dsiTitle, string expectedDSITitle)
{
// Arrange
var dataSource = new DataSource();
var dataSource = new SnowflakeDataSource() { Title = dsTitle };

// Act
var item = new SnowflakeDataSourceItem(title, dataSource);
var item = new SnowflakeDataSourceItem(dsiTitle, dataSource);

// Assert
Assert.Equal(title, item.Title);
Assert.Equal(SchemaTypeNames.DataSourceItemType, item.SchemaTypeName);
Assert.Equal(expectedDSTitle, item.DataSource.Title);
Assert.Equal(dataSource.Id, item.DataSource.Id);
Assert.Equal(dataSource.Id, item.DataSourceId);
Assert.IsType<SnowflakeDataSource>(item.DataSource);
Assert.Same(dataSource, item.DataSource);
Assert.Equal(expectedDSITitle, item.Title);
}

[Fact]
public void ProcessDataOnServer_ShouldSetAndGetValue_WithInputs()
public void GetProcessDataOnServer_ReturnSameValue_AfterSet()
{
// Arrange
var item = new SnowflakeDataSourceItem("Test Item", new SnowflakeDataSource());
var expectedProcessDataOnServer = true;

// Act
item.ProcessDataOnServer = true;
item.ProcessDataOnServer = expectedProcessDataOnServer;

// Assert
Assert.True(item.ProcessDataOnServer);
Assert.True(item.Properties.GetValue<bool>("ServerAggregation"));
Assert.Equal(expectedProcessDataOnServer, item.ProcessDataOnServer);
Assert.Equal(expectedProcessDataOnServer, item.Properties.GetValue<bool>("ServerAggregation"));
}

[Fact]
public void ToJsonString_CreatesFormattedJson_NoConditions()
{
// Arrange
var expectedJson = @"{
""_type"": ""DataSourceItemType"",
""Id"": ""a60ab508-0ed4-46e4-8d90-c3a9c09c29b8"",
""Title"": ""SnowFlake DSI"",
""DataSourceId"": ""snowflake_ds"",
""HasTabularData"": true,
""HasAsset"": false,
""Properties"": {
""ServerAggregation"": true,
""Table"": ""CALL_CENTER"",
""Schema"": ""TPCDS_SF100TCL""
},
""Parameters"": {
""RPCustomQuery"": ""Select CC_CALL_CENTER_ID, CC_CALL_CENTER_SK from CALL_CENTER""
}
}";

var dataSource = new SnowflakeDataSource()
{
Id = "snowflake_ds",
};
var dataSourceItem = new SnowflakeDataSourceItem("SnowFlake DSI", dataSource)
{
Id = "a60ab508-0ed4-46e4-8d90-c3a9c09c29b8",
HasTabularData = true,
HasAsset = false,
ProcessDataOnServer = true,
Table = "CALL_CENTER",
Schema = "TPCDS_SF100TCL",
CustomQuery = "Select CC_CALL_CENTER_ID, CC_CALL_CENTER_SK from CALL_CENTER",
};

var expectedJObject = JObject.Parse(expectedJson);

// Act
var json = dataSourceItem.ToJsonString();
var actualJObject = JObject.Parse(json);

// Assert
Assert.Equal(expectedJObject, actualJObject);

}
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using Reveal.Sdk.Dom.Core.Extensions;
using Newtonsoft.Json.Linq;
using Reveal.Sdk.Dom.Core.Extensions;
using Reveal.Sdk.Dom.Data;
using Xunit;

Expand All @@ -7,7 +8,7 @@ namespace Reveal.Sdk.Dom.Tests.Data.DataSources
public class SnowflakeDataSourceFixture
{
[Fact]
public void SnowflakeDataSource_ShouldSetProviderToSnowflake()
public void Constructor_SetDefaultProvider_WithoutParameter()
{
// Act
var dataSource = new SnowflakeDataSource();
Expand All @@ -19,7 +20,7 @@ public void SnowflakeDataSource_ShouldSetProviderToSnowflake()
[Theory]
[InlineData("testAccount")]
[InlineData(null)]
public void Account_ShouldSetAndGetValue_WithDifferentInputs(string account)
public void GetAccount_ReturnSameValue_AfterSetAccount(string account)
{
// Arrange
var dataSource = new SnowflakeDataSource();
Expand All @@ -35,7 +36,7 @@ public void Account_ShouldSetAndGetValue_WithDifferentInputs(string account)
[Theory]
[InlineData("testRole")]
[InlineData(null)]
public void Role_ShouldSetAndGetValue_WithDifferentInputs(string role)
public void GetRole_ReturnSameValue_AfterSetRole(string role)
{
// Arrange
var dataSource = new SnowflakeDataSource();
Expand All @@ -51,7 +52,7 @@ public void Role_ShouldSetAndGetValue_WithDifferentInputs(string role)
[Theory]
[InlineData("testWarehouse")]
[InlineData(null)]
public void Warehouse_ShouldSetAndGetValue_WithDifferentInputs(string warehouse)
public void SetWarehouse_ReturnSameValue_AfterSetWarehouse(string warehouse)
{
// Arrange
var dataSource = new SnowflakeDataSource();
Expand All @@ -63,5 +64,51 @@ public void Warehouse_ShouldSetAndGetValue_WithDifferentInputs(string warehouse)
Assert.Equal(warehouse, dataSource.Warehouse);
Assert.Equal(warehouse, dataSource.Properties.GetValue<string>("Warehouse"));
}

[Fact]
public void ToJsonString_CreatesFormattedJson_NoConditions()
{
// Arrange
var expectedJson = @"{
""_type"": ""DataSourceType"",
""Id"": ""snowflake_ds"",
""Provider"": ""SNOWFLAKE"",
""Description"": ""Snowflake TEST"",
""Subtitle"": ""Snowflake TEST Subtitle"",
""Properties"": {
""ServerAggregationDefault"": true,
""ServerAggregationReadOnly"": false,
""Host"": ""gpiskyj-al16914.snowflakecomputing.com"",
""Database"": ""SNOWFLAKE_SAMPLE_DATA"",
""Account"": ""pqwkobs-xb90908"",
""Warehouse"": ""COMPUTE_WH"",
""Schema"": ""TPCDS_SF100TCL""
},
//""Settings"": {} // TODO: Update to check settings fields after Postgresql PR is merged
}";

var dataSource = new SnowflakeDataSource()
{
Id = "snowflake_ds",
Title = "Snowflake TEST",
Subtitle = "Snowflake TEST Subtitle",
ProcessDataOnServerDefaultValue = true,
ProcessDataOnServerReadOnly = false,
Host = "gpiskyj-al16914.snowflakecomputing.com",
Database = "SNOWFLAKE_SAMPLE_DATA",
Account = "pqwkobs-xb90908",
Warehouse = "COMPUTE_WH",
Schema = "TPCDS_SF100TCL",
};
var expectedJObject = JObject.Parse(expectedJson);

// Act
var json = dataSource.ToJsonString();
var actualJObject = JObject.Parse(json);

// Assert
Assert.Equal(expectedJObject, actualJObject);

}
}
}
20 changes: 20 additions & 0 deletions src/Reveal.Sdk.Dom.Tests/Data/TableDataSourceltemFixture.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using Moq;
using Reveal.Sdk.Dom.Core.Extensions;
using Reveal.Sdk.Dom.Data;
using Xunit;

Expand Down Expand Up @@ -39,6 +40,25 @@ public void GetTable_ReturnSameValue_WithSetValue()

// Assert
Assert.Equal(expectedTable, tableDataSourceItem.Table);
Assert.Equal(expectedTable, tableDataSourceItem.Properties.GetValue<string>("Table"));
}

[Fact]
public void GetCustomQuery_ReturnSameValue_WithSetValue()
{
// Arrange
var title = "Title";
var dataSource = new DataSource();
var mock = new Mock<TableDataSourceItem>(title, dataSource);
var tableDataSourceItem = mock.Object;
var expectedCustomQuery = "Select FieldA, FieldB from SampleTable;";

// Act
tableDataSourceItem.CustomQuery = expectedCustomQuery;

// Assert
Assert.Equal(expectedCustomQuery, tableDataSourceItem.CustomQuery);
Assert.Equal(expectedCustomQuery, tableDataSourceItem.Parameters.GetValue<string>("RPCustomQuery"));
}
}
}
2 changes: 1 addition & 1 deletion src/Reveal.Sdk.Dom/Data/DataSources/SnowflakeDataSource.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

namespace Reveal.Sdk.Dom.Data
{
public class SnowflakeDataSource : ProcessDataSource
public class SnowflakeDataSource : SchemaDataSource
{
public SnowflakeDataSource()
{
Expand Down
7 changes: 7 additions & 0 deletions src/Reveal.Sdk.Dom/Data/TableDataSourceItem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -15,5 +15,12 @@ public string Table
get => Properties.GetValue<string>("Table");
set => Properties.SetItem("Table", value);
}

[JsonIgnore]
public string CustomQuery
{
get => Parameters.GetValue<string>("RPCustomQuery");
set => Parameters.SetItem("RPCustomQuery", value);
}
}
}

0 comments on commit 14dd37b

Please sign in to comment.