Skip to content

Commit

Permalink
Merge pull request #142 from RevealBi/data-source/snowflake
Browse files Browse the repository at this point in the history
Update Snowflake datasource / datasource item
  • Loading branch information
brianlagunas authored Dec 11, 2024
2 parents 202d428 + 8b92aff commit 45dde57
Show file tree
Hide file tree
Showing 7 changed files with 190 additions and 25 deletions.
50 changes: 50 additions & 0 deletions e2e/Sandbox/DashboardCreators/SnowFlakeDashboard.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
using Reveal.Sdk.Dom;
using Reveal.Sdk.Dom.Data;
using Reveal.Sdk.Dom.Visualizations;
using System.Collections.Generic;

namespace Sandbox.DashboardFactories
{
internal class SnowflakeDashboard : IDashboardCreator
{
public string Name => "Snowflake Data Source";

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",
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",
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;
}
}
}
2 changes: 2 additions & 0 deletions e2e/Sandbox/MainWindow.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ public partial class MainWindow : Window
new PostgresqlDashboard(),
new RestDataSourceDashboard(),
new SalesDashboard(),
new SnowflakeDashboard(),
new SqlServerDataSourceDashboards(),
};

Expand All @@ -61,6 +62,7 @@ public MainWindow()
RevealSdkSettings.DataSourceProvider = new DataSourceProvider();
RevealSdkSettings.AuthenticationProvider = new AuthenticationProvider();
RevealSdkSettings.DataSources.RegisterMicrosoftSqlServer().RegisterMicrosoftAnalysisServices().RegisterPostgreSQL();
RevealSdkSettings.DataSources.RegisterSnowflake();

LoadDashboards();

Expand Down
7 changes: 6 additions & 1 deletion 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;
using Reveal.Sdk.Data.Microsoft.AnalysisServices;
using Reveal.Sdk.Data.Microsoft.SqlServer;
using Reveal.Sdk.Data.Snowflake;
using Reveal.Sdk.Data.PostgreSQL;
using System.Threading.Tasks;

Expand All @@ -19,6 +20,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");
}
else if (dataSource is RVPostgresDataSource)
{
userCredential = new RVUsernamePasswordDataSourceCredential("postgres", "postgres");
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,103 @@ 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 = expectedProcessDataOnServer;

// Assert
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": {}
}
""";
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",
};
var expectedJObject = JObject.Parse(expectedJson);

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

// Assert
Assert.True(item.ProcessDataOnServer);
Assert.True(item.Properties.GetValue<bool>("ServerAggregation"));
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,54 @@ 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": {
"DefaultRefreshRate": 180
}
}
""";
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",
DefaultRefreshRate = "180"
};
var expectedJObject = JObject.Parse(expectedJson);

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

// Assert
Assert.Equal(expectedJObject, actualJObject);
}
}
}
2 changes: 2 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,7 @@ public void GetTable_ReturnSameValue_WithSetValue()

// Assert
Assert.Equal(expectedTable, tableDataSourceItem.Table);
Assert.Equal(expectedTable, tableDataSourceItem.Properties.GetValue<string>("Table"));
}
}
}
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

0 comments on commit 45dde57

Please sign in to comment.