Example #1
0
            public async Task WhenGivenStringDownloadPdf()
            {
                var httpClientOptions = ConfigurationHelpers.CreateOptions(HttpClientOptions);
                var httpClientFactory = new HttpClientFactory(httpClientOptions);

                var trustedTicketGetter = new TrustedTicketGetter(Options, TableauAdminCredentials, TableauTenantFinder, httpClientFactory);
                var testService         = new TableauVisualServices(trustedTicketGetter, Options, Logger, httpClientFactory) as ITableauVisualServices;

                var testString =
                    "{\"sessionId\":\"D8FCB32D154543D2A559D333F9D76FC2-0:0\",\"workbookName\":\"AverageRiskMap\",\"viewName\":\"AverageRiskDashboard\",\"tempFileKey\":\"1294393454\",\"referrerUri\":\"https://tableau-dev.traffk.com/trusted/DFJ0lIm3XemqDTDM_hpX4ZGX/views/AverageRiskMap/AverageRiskDashboard?:size=1610,31&:embed=y&:showVizHome=n&:jsdebug=y&:bootstrapWhenNotified=y&:tabs=n&:apiID=host0\",\"cookiesJson\":\"[{\\\"Comment\\\":\\\"\\\",\\\"CommentUri\\\":null,\\\"HttpOnly\\\":true,\\\"Discard\\\":false,\\\"Domain\\\":\\\"tableau-dev.traffk.com\\\",\\\"Expired\\\":false,\\\"Expires\\\":\\\"0001-01-01T00:00:00\\\",\\\"Name\\\":\\\"workgroup_session_id\\\",\\\"Path\\\":\\\"/\\\",\\\"Port\\\":\\\"\\\",\\\"Secure\\\":true,\\\"TimeStamp\\\":\\\"2017-05-18T15:11:54.4239408-07:00\\\",\\\"Value\\\":\\\"uhHuUMYmk7mYzWWr26HI8oememKagKSk\\\",\\\"Version\\\":0},{\\\"Comment\\\":\\\"\\\",\\\"CommentUri\\\":null,\\\"HttpOnly\\\":false,\\\"Discard\\\":false,\\\"Domain\\\":\\\"tableau-dev.traffk.com\\\",\\\"Expired\\\":false,\\\"Expires\\\":\\\"0001-01-01T00:00:00\\\",\\\"Name\\\":\\\"XSRF-TOKEN\\\",\\\"Path\\\":\\\"/\\\",\\\"Port\\\":\\\"\\\",\\\"Secure\\\":true,\\\"TimeStamp\\\":\\\"2017-05-18T15:11:54.4269516-07:00\\\",\\\"Value\\\":\\\"hrYPgkej0VvLonyizHZ9xbMj5QZeldAA\\\",\\\"Version\\\":0},{\\\"Comment\\\":\\\"\\\",\\\"CommentUri\\\":null,\\\"HttpOnly\\\":true,\\\"Discard\\\":false,\\\"Domain\\\":\\\"tableau-dev.traffk.com\\\",\\\"Expired\\\":false,\\\"Expires\\\":\\\"0001-01-01T00:00:00\\\",\\\"Name\\\":\\\"tableau_locale\\\",\\\"Path\\\":\\\"/\\\",\\\"Port\\\":\\\"\\\",\\\"Secure\\\":true,\\\"TimeStamp\\\":\\\"2017-05-18T15:11:54.6386584-07:00\\\",\\\"Value\\\":\\\"en\\\",\\\"Version\\\":0}]\"}";

                var deserializedPdfOptions = JsonConvert.DeserializeObject <DownloadPdfOptions>(testString);

                var pdfBytes = await testService.DownloadPdfAsync(deserializedPdfOptions);

                Assert.IsNotNull(pdfBytes);

                var tempPath = Path.GetTempPath() + @"TableauPDFTestDownload";

                Directory.CreateDirectory(tempPath); //Doesn't create if it already exists

                var dateTime = DateTime.UtcNow.ToString().RemoveSpecialCharacters();

                var tempFilePath = tempPath + $@"\test-{dateTime}.pdf";

                File.WriteAllBytes(tempFilePath, pdfBytes);
            }
Example #2
0
            public async Task WhenSignedInGetUnderlyingDataUsingWorksheetName()
            {
                var httpClientOptions = ConfigurationHelpers.CreateOptions(HttpClientOptions);
                var httpClientFactory = new HttpClientFactory(httpClientOptions);

                var testTimeout = TimeSpan.FromHours(12); //Required so that test itself doesn't timeou

                var trustedTicketGetter = new TrustedTicketGetter(Options, TableauAdminCredentials, TableauTenantFinder, httpClientFactory);
                var testService         = new TableauVisualServices(trustedTicketGetter, Options, Logger, httpClientFactory) as ITableauVisualServices;

                var worksheetName = "Risk by Occupation";
                var testGetUnderlyingDataOptions = new GetUnderlyingDataOptions {
                    WorksheetName = worksheetName
                };

                //var task = testService.GetUnderlyingDataAsync(testGetUnderlyingDataOptions, "RiskIndex-Occupations",
                //    "EmploymentandRisk").ExecuteSynchronously();

                var task = testService.GetUnderlyingDataAsync(testGetUnderlyingDataOptions, "RiskIndex-Occupations",
                                                              "EmploymentandRisk");

                if (await Task.WhenAny(task, Task.Delay(testTimeout)) == task)
                {
                    task.ExecuteSynchronously();
                    var data      = task.Result;
                    var dataTable = data.ToDataTable();
                    Assert.IsNotNull(data);
                    Assert.IsNotNull(dataTable);
                }
                else
                {
                    throw new Exception("Timed Out");
                }
            }
Example #3
0
            public async Task WhenGivenJsonObjectDownloadPdf()
            {
                var httpClientOptions = ConfigurationHelpers.CreateOptions(HttpClientOptions);
                var httpClientFactory = new HttpClientFactory(httpClientOptions);

                var trustedTicketGetter = new TrustedTicketGetter(Options, TableauAdminCredentials, TableauTenantFinder, httpClientFactory);
                var testService         = new TableauVisualServices(trustedTicketGetter, Options, Logger, httpClientFactory) as ITableauVisualServices;

                var testGetPdfOptions = new CreatePdfOptions("AverageRiskMap", "AverageRiskDashboard",
                                                             "Average Risk Dashboard");

                var downloadPdfOptions = await testService.CreatePdfAsync(testGetPdfOptions);

                Assert.IsNotNull(downloadPdfOptions);

                var downloadPdfJsonObject = JsonConvert.SerializeObject(downloadPdfOptions);

                var deserializedPdfOptions = JsonConvert.DeserializeObject <DownloadPdfOptions>(downloadPdfJsonObject);

                var pdfBytes = await testService.DownloadPdfAsync(deserializedPdfOptions);

                Assert.IsNotNull(pdfBytes);

                var tempPath = Path.GetTempPath() + @"TableauPDFTestDownload";

                Directory.CreateDirectory(tempPath); //Doesn't create if it already exists

                var dateTime = DateTime.UtcNow.ToString().RemoveSpecialCharacters();

                var tempFilePath = tempPath + $@"\test-{dateTime}.pdf";

                File.WriteAllBytes(tempFilePath, pdfBytes);
            }
Example #4
0
            public async Task WhenSignedInGetUnderlyingDataWithManyRows()
            {
                var httpClientOptions = ConfigurationHelpers.CreateOptions(HttpClientOptions);
                var httpClientFactory = new HttpClientFactory(httpClientOptions);

                var testTimeout = TimeSpan.FromHours(12); //Required so that test itself doesn't timeout
                var testMaxRows = 7500000;

                var trustedTicketGetter = new TrustedTicketGetter(Options, TableauAdminCredentials, TableauTenantFinder, httpClientFactory);
                var testService         = new TableauVisualServices(trustedTicketGetter, Options, Logger, httpClientFactory) as ITableauVisualServices;

                var worksheetName = "Avg Risk by Mbr Relationship";

                var testGetUnderlyingDataOptions = new GetUnderlyingDataOptions {
                    WorksheetName = worksheetName, MaxRows = testMaxRows
                };
                var task = testService.GetUnderlyingDataAsync(testGetUnderlyingDataOptions, "AverageRiskScore",
                                                              "1-AverageRiskScore_demo");

                if (await Task.WhenAny(task, Task.Delay(testTimeout)) == task)
                {
                    var data      = task.Result;
                    var dataTable = data.ToDataTable();
                    Assert.IsNotNull(data);
                    Assert.IsNotNull(dataTable);
                }
                else
                {
                    throw new Exception("Timed Out");
                }
            }
Example #5
0
            public void WhenGivenExistingSiteMigrateData()
            {
                var newSiteOptions          = MockEnvironment.TableauSignInOptions("https://tableau-dev.traffk.com/#/site/TestMasterTenant").Object;
                var tableauAdminCredentials = ConfigurationHelpers.CreateOptions(TableauAdminCredentials);
                var httpClientOptions       = ConfigurationHelpers.CreateOptions(HttpClientOptions);
                var httpClientFactory       = new HttpClientFactory(httpClientOptions);

                var testAdminService =
                    new TableauAdminService(newSiteOptions, tableauAdminCredentials, httpClientFactory, Logger) as ITableauAdminService;

                var    dbUserName           = "******";
                var    dbPassword           = "******";
                var    testNewServerAddress = "traffkrdb-dev.database.windows.net/";
                var    testDbName           = "TraffkHip2";
                string path = Path.GetTempPath();

                path = path + @"TableauIntegrationTestFiles";

                var dataMigrationRequest = new TableauDataMigrationRequest("ExistingTestTenant", testNewServerAddress, testDbName, dbUserName, dbPassword, path);

                testAdminService.MigrateDataset(dataMigrationRequest);

                DirectoryInfo di = new DirectoryInfo(path);

                foreach (FileInfo file in di.GetFiles())
                {
                    file.Delete();
                }
                foreach (DirectoryInfo dir in di.GetDirectories())
                {
                    dir.Delete(true);
                }
            }
Example #6
0
            public void WhenSignedInDownloadPreviewImage()
            {
                var httpClientOptions = ConfigurationHelpers.CreateOptions(HttpClientOptions);
                var httpClientFactory = new HttpClientFactory(httpClientOptions);

                var testService    = new TableauViewerService(Options, TableauUserCredentials, httpClientFactory, Logger) as ITableauViewerService;
                var testImageBytes = testService.DownloadPreviewImageForView("6d8f31d9-aceb-40be-867d-1c980215b246", "c8922aac-c202-446b-8ed2-ff4dde96eaba");

                Assert.IsNotNull(testImageBytes);
            }
Example #7
0
            public void WhenSignedInDownloadViewList()
            {
                var httpClientOptions = ConfigurationHelpers.CreateOptions(HttpClientOptions);
                var httpClientFactory = new HttpClientFactory(httpClientOptions);

                var testService = new TableauViewerService(Options, TableauUserCredentials, httpClientFactory, Logger) as ITableauViewerService;
                var views       = testService.DownloadViewsForSite();

                Assert.IsNotNull(views);
                Assert.IsTrue(views.Views.Any());
            }
Example #8
0
            public async Task WhenSignedInCreatePdf()
            {
                var httpClientOptions = ConfigurationHelpers.CreateOptions(HttpClientOptions);
                var httpClientFactory = new HttpClientFactory(httpClientOptions);

                var trustedTicketGetter = new TrustedTicketGetter(Options, TableauAdminCredentials, TableauTenantFinder, httpClientFactory);
                var testService         = new TableauVisualServices(trustedTicketGetter, Options, Logger, httpClientFactory) as ITableauVisualServices;

                var testGetPdfOptions = new CreatePdfOptions("AverageRiskMap", "AverageRiskDashboard",
                                                             "Average Risk Dashboard");

                var downloadPdfOptions = await testService.CreatePdfAsync(testGetPdfOptions);

                Assert.IsNotNull(downloadPdfOptions);
            }
Example #9
0
            public void WhenGivenUrlSignIn()
            {
                var httpClientOptions = ConfigurationHelpers.CreateOptions(HttpClientOptions);
                var httpClientFactory = new HttpClientFactory(httpClientOptions);

                var testService = new TableauViewerService(Options, TableauUserCredentials, httpClientFactory, Logger);

                Assert.IsNotNull(testService);

                var tableauAdminCredentials = ConfigurationHelpers.CreateOptions(TableauAdminCredentials);

                var testAdminService = new TableauAdminService(Options, tableauAdminCredentials, httpClientFactory, Logger);

                Assert.IsNotNull(testAdminService);
            }
Example #10
0
            public void WhenSignedInGetUnderlyingDataUsingDashboardName()
            {
                var httpClientOptions = ConfigurationHelpers.CreateOptions(HttpClientOptions);
                var httpClientFactory = new HttpClientFactory(httpClientOptions);

                var trustedTicketGetter = new TrustedTicketGetter(Options, TableauAdminCredentials, TableauTenantFinder, httpClientFactory);
                var testService         = new TableauVisualServices(trustedTicketGetter, Options, Logger, httpClientFactory) as ITableauVisualServices;

                var dashboardName = "Employment and Risk";
                var testGetUnderlyingDataOptions = new GetUnderlyingDataOptions {
                    DashboardName = dashboardName
                };
                var data = testService.GetUnderlyingDataAsync(testGetUnderlyingDataOptions, "RiskIndex-Occupations",
                                                              "EmploymentandRisk").ExecuteSynchronously();
                var dataTable = data.ToDataTable();

                Assert.IsNotNull(data);
                Assert.IsNotNull(dataTable);
            }
Example #11
0
        void ITableauAdminService.MigrateDataset(TableauDataMigrationRequest request)
        {
            base.Options.UpdateForTenant(request.DestTableauTenantId);
            var destinationSiteSignInOptions = ConfigurationHelpers.CreateOptions(Options);
            var adminCredentialOptions       = ConfigurationHelpers.CreateOptions(TableauAdminCredentials);
            var destinationAdminService      = new TableauAdminService(destinationSiteSignInOptions, adminCredentialOptions, HttpClientFactory, Logger);
            var destinationSiteInfo          = destinationAdminService.GetSiteInfo();

            var sourceAdminService = this; //not normal convention, but using this to make it clearer to future devs

            //Download datasources from master site
            var dataSources = sourceAdminService.DownloadDatasourceList();

            sourceAdminService.DownloadDatasourceFiles(dataSources, request.TempFilePath);

            foreach (var datasource in Directory.GetFiles(request.TempFilePath + @"\Default"))
            {
                TableauFileEditor.UpdateDatasourceDatabaseName(datasource, request.DestDbName, request.TempFilePath);
            }

            //Upload datasources to new site
            var uploadedDataSources = destinationAdminService.UploadDatasourceFiles("Default", request.DestDbUsername, request.DestDbPassword, true, request.TempFilePath);

            //Download workbooks from master site
            var workbooksToDownload = sourceAdminService.DownloadWorkbookList();

            sourceAdminService.DownloadWorkbookFiles(workbooksToDownload, request.TempFilePath, false);

            foreach (var workbook in Directory.GetFiles(request.TempFilePath))
            {
                TableauFileEditor.UpdateWorkbookFileSiteReferences(workbook, destinationSiteInfo);
            }

            //Upload workbooks to new site
            destinationAdminService.UploadWorkbooks("Default", request.DestDbUsername, request.DestDbPassword, true, request.TempFilePath);
        }