From 005d1286fb452bfacb7901c54ec4b93d39be2a3f Mon Sep 17 00:00:00 2001 From: Rick Anderson Date: Tue, 4 Jun 2024 15:42:06 -0700 Subject: [PATCH 1/9] updated DenyAccessToSystem for multiples roles --- .../Features/DenyAccessToSystem.feature | 7 +- .../Features/DenyAccessToSystem.feature.cs | 15 ++-- .../SpecFlowProjectBDD/Helpers/AuthHelper.cs | 4 +- .../Helpers/DataBaseHelper.cs | 23 +++++- .../StepDefinitions/DenyAccessToSystem.cs | 76 ++++++++++++++++--- .../StepDefinitions/TermsAndConditions.cs | 42 ++++++---- 6 files changed, 132 insertions(+), 35 deletions(-) diff --git a/Test/UITest/SpecFlowProjectBDD/Features/DenyAccessToSystem.feature b/Test/UITest/SpecFlowProjectBDD/Features/DenyAccessToSystem.feature index 4da78008..0cc409d3 100644 --- a/Test/UITest/SpecFlowProjectBDD/Features/DenyAccessToSystem.feature +++ b/Test/UITest/SpecFlowProjectBDD/Features/DenyAccessToSystem.feature @@ -7,7 +7,8 @@ Scenario: DenyAccessToSystem Given that I am an authenticated LG, CEU, Provincial Gov or Platform user and the expected result is "" - When I attempt to access the Data Sharing System as "" + #When I attempt to access the Data Sharing System as "" with email "" and Role "" + When I attempt to access the Data Sharing System as "" with email "" and Role "" Then I dont have the required access permissions @@ -15,5 +16,5 @@ Scenario: DenyAccessToSystem # # Examples: - | UserName | Description | ExpectedResult | - | CEUATST | HappyPath | pass | \ No newline at end of file + | UserName | Email | RoleName | Description | ExpectedResult | + | CEUATST | ceuatst@gov.bc.ca | ceu_admin | HappyPath | pass | \ No newline at end of file diff --git a/Test/UITest/SpecFlowProjectBDD/Features/DenyAccessToSystem.feature.cs b/Test/UITest/SpecFlowProjectBDD/Features/DenyAccessToSystem.feature.cs index 1761bc48..545b0bf9 100644 --- a/Test/UITest/SpecFlowProjectBDD/Features/DenyAccessToSystem.feature.cs +++ b/Test/UITest/SpecFlowProjectBDD/Features/DenyAccessToSystem.feature.cs @@ -76,8 +76,8 @@ public void ScenarioCleanup() [NUnit.Framework.TestAttribute()] [NUnit.Framework.DescriptionAttribute("DenyAccessToSystem")] [NUnit.Framework.CategoryAttribute("Access")] - [NUnit.Framework.TestCaseAttribute("CEUATST", "HappyPath", "pass", null)] - public void DenyAccessToSystem(string userName, string description, string expectedResult, string[] exampleTags) + [NUnit.Framework.TestCaseAttribute("CEUATST", "ceuatst@gov.bc.ca", "ceu_admin", "HappyPath", "pass", null)] + public void DenyAccessToSystem(string userName, string email, string roleName, string description, string expectedResult, string[] exampleTags) { string[] @__tags = new string[] { "Access"}; @@ -88,6 +88,8 @@ public void DenyAccessToSystem(string userName, string description, string expec string[] tagsOfScenario = @__tags; System.Collections.Specialized.OrderedDictionary argumentsOfScenario = new System.Collections.Specialized.OrderedDictionary(); argumentsOfScenario.Add("UserName", userName); + argumentsOfScenario.Add("Email", email); + argumentsOfScenario.Add("RoleName", roleName); argumentsOfScenario.Add("Description", description); argumentsOfScenario.Add("ExpectedResult", expectedResult); TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("DenyAccessToSystem", null, tagsOfScenario, argumentsOfScenario, featureTags); @@ -105,13 +107,14 @@ public void DenyAccessToSystem(string userName, string description, string expec testRunner.Given(string.Format("that I am an authenticated LG, CEU, Provincial Gov or Platform user and the expec" + "ted result is \"{0}\"", expectedResult), ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Given "); #line hidden -#line 10 - testRunner.When(string.Format("I attempt to access the Data Sharing System as \"{0}\"", userName), ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "When "); +#line 11 + testRunner.When(string.Format("I attempt to access the Data Sharing System as \"{0}\" with email \"{1}\" and Role \"{" + + "2}\"", userName, email, roleName), ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "When "); #line hidden -#line 12 +#line 13 testRunner.Then("I dont have the required access permissions", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Then "); #line hidden -#line 14 +#line 15 testRunner.Then("I should see a specific message indicating that access is restricted", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Then "); #line hidden } diff --git a/Test/UITest/SpecFlowProjectBDD/Helpers/AuthHelper.cs b/Test/UITest/SpecFlowProjectBDD/Helpers/AuthHelper.cs index 91726cd5..6ae58554 100644 --- a/Test/UITest/SpecFlowProjectBDD/Helpers/AuthHelper.cs +++ b/Test/UITest/SpecFlowProjectBDD/Helpers/AuthHelper.cs @@ -37,12 +37,12 @@ public LogonTypeEnum SetLogonType(UserTypeEnum UserType) switch (UserType) { case UserTypeEnum.BCGOVERNMENTSTAFF: + case UserTypeEnum.CEUSTAFF: + case UserTypeEnum.CEUADMIN: { _LogonType = SFEnums.LogonTypeEnum.IDIR; break; } - case UserTypeEnum.CEUSTAFF: - case UserTypeEnum.CEUADMIN: case UserTypeEnum.LOCALGOVERNMENT: case UserTypeEnum.SHORTTERMRENTALPLATFORM: { diff --git a/Test/UITest/SpecFlowProjectBDD/Helpers/DataBaseHelper.cs b/Test/UITest/SpecFlowProjectBDD/Helpers/DataBaseHelper.cs index cbd319f3..1de08ed6 100644 --- a/Test/UITest/SpecFlowProjectBDD/Helpers/DataBaseHelper.cs +++ b/Test/UITest/SpecFlowProjectBDD/Helpers/DataBaseHelper.cs @@ -31,11 +31,30 @@ public List GetIdentities() { if (null == email) { - throw new ArgumentNullException("email"); + throw new ArgumentNullException("Email cannot be null"); } - var identity = _DssDBContext.DssUserIdentities.Where(p => p.EmailAddressDsc == email).FirstOrDefault(); + DssUserIdentity? identity = _DssDBContext.DssUserIdentities.Where(p => p.EmailAddressDsc == email).FirstOrDefault(); return (identity); } + + + public DssUserRole? GetUserRole(string TestUserType) + { + if (null == TestUserType) + { + throw new ArgumentNullException("UserType cannot be null"); + } + + DssUserRole? userRole = _DssDBContext.DssUserRoles.FirstOrDefault(p => p.UserRoleCd == TestUserType); + + return (userRole); + } + + public void SaveChanges() + { + _DssDBContext.SaveChanges(); + } + } } diff --git a/Test/UITest/SpecFlowProjectBDD/StepDefinitions/DenyAccessToSystem.cs b/Test/UITest/SpecFlowProjectBDD/StepDefinitions/DenyAccessToSystem.cs index d3b6428a..8c071474 100644 --- a/Test/UITest/SpecFlowProjectBDD/StepDefinitions/DenyAccessToSystem.cs +++ b/Test/UITest/SpecFlowProjectBDD/StepDefinitions/DenyAccessToSystem.cs @@ -1,5 +1,10 @@ using Configuration; +using DataBase.Entities; +using Microsoft.EntityFrameworkCore; +using Newtonsoft.Json; +using NUnit.Framework; using NUnit.Framework.Legacy; +using SpecFlowProjectBDD.Helpers; using TestFrameWork.Models; using UITest.PageObjects; using UITest.TestDriver; @@ -18,9 +23,23 @@ public sealed class DenyAccessToSystem private NoticeOfTakeDownPage _NoticeOfTakeDownPage; private string _TestUserName; private string _TestPassword; + private string _TestEmail; private bool _ExpectedResult = false; + private SFEnums.UserTypeEnum _UserType; + private DssDbContext _DssDBContext; + private DssUserIdentity _UserIdentity; + private bool _OriginalEnabledValue; AppSettings _AppSettings; + + [BeforeScenario] + public void TestSetup() + { + DbContextOptions dbContextOptions = new DbContextOptions(); + _DssDBContext = new DssDbContext(dbContextOptions); + } + + public DenyAccessToSystem(SeleniumDriver Driver) { _Driver = Driver; @@ -33,30 +52,59 @@ public DenyAccessToSystem(SeleniumDriver Driver) //User Authentication [Given(@"that I am an authenticated LG, CEU, Provincial Gov or Platform user and the expected result is ""(.*)""")] - public void GivenIAmAauthenticatedGovernmentUseer(string ExpectedResult) + public void GivenIAmAauthenticatedGovernmentUser(string ExpectedResult) { _ExpectedResult = ExpectedResult.ToUpper() == "PASS" ? true : false; _Driver.Url = _AppSettings.GetServer("default"); _Driver.Navigate(); - _PathFinderPage.IDRButton.Click(); + //_PathFinderPage.IDRButton.Click(); } - - [When(@"I attempt to access the Data Sharing System as ""(.*)""")] - public void IAttemptToAccessTheDataSharingSystem(string UserName) + //I attempt to access the Data Sharing System as "" with email "" and RoleName "" + //[When(@"I attempt to access the Data Sharing System as ""(.*)"" with email ""(.*)"" and Role ""(.*)""")] + [When(@"I attempt to access the Data Sharing System as ""(.*)"" with email ""(.*)"" and Role ""(.*)""")] + public void IAttemptToAccessTheDataSharingSystem(string UserName, string Email, string RoleName) { + if (string.IsNullOrWhiteSpace(UserName)) + { + throw new ArgumentException("UserName cannot be empty"); + } + + if ((string.IsNullOrWhiteSpace(Email))) + { + throw new ArgumentException("Email cannot be empty"); + } + + if ((string.IsNullOrWhiteSpace(RoleName))) + { + throw new ArgumentException("Rolename cannot be empty"); + } + _TestUserName = UserName; _TestPassword = _AppSettings.GetUser(_TestUserName) ?? string.Empty; + _TestEmail = Email; + //////////////////// DB Setup //////////////////////////////////////// + // Retrieve the user identity + _UserIdentity = _DssDBContext.DssUserIdentities.FirstOrDefault(p => p.EmailAddressDsc == _TestEmail); + _OriginalEnabledValue = _UserIdentity.IsEnabled; + + // Update properties of the identity + _UserIdentity.IsEnabled = false; - _IDirPage.UserNameTextBox.WaitFor(5); + _DssDBContext.SaveChanges(); + ///////////////////////////////////////////////////////////// + + UserHelper userHelper = new UserHelper(); - _IDirPage.UserNameTextBox.EnterText(_TestUserName); + _UserType = userHelper.SetUserType(RoleName); - _IDirPage.PasswordTextBox.EnterText(_TestPassword); + AuthHelper authHelper = new AuthHelper(_Driver); + + //Authenticate user using IDir or BCID depending on the user + authHelper.Authenticate(_TestUserName, _UserType); - _IDirPage.ContinueButton.Click(); } [Then("I dont have the required access permissions")] @@ -71,5 +119,15 @@ public void IShouldSeeASpecificMessageIndicatingThatAccessIsRestricted() System.Threading.Thread.Sleep(1000); ClassicAssert.IsTrue(_LayoutPage.Driver.PageSource.Contains("401 Access Denied")); } + + [AfterScenario] + public void TestTearDown() + { + //restore original User value + + _UserIdentity.IsEnabled = _OriginalEnabledValue; + + _DssDBContext.SaveChanges(); + } } } diff --git a/Test/UITest/SpecFlowProjectBDD/StepDefinitions/TermsAndConditions.cs b/Test/UITest/SpecFlowProjectBDD/StepDefinitions/TermsAndConditions.cs index 124b2849..4c0712fc 100644 --- a/Test/UITest/SpecFlowProjectBDD/StepDefinitions/TermsAndConditions.cs +++ b/Test/UITest/SpecFlowProjectBDD/StepDefinitions/TermsAndConditions.cs @@ -1,6 +1,7 @@ using Configuration; using DataBase.Entities; using Microsoft.EntityFrameworkCore; +using NUnit.Framework; using NUnit.Framework.Legacy; using OpenQA.Selenium; using OpenQA.Selenium.DevTools.V118.Debugger; @@ -31,6 +32,8 @@ public sealed class TermsAndConditions private bool _ExpectedResult = false; private AppSettings _AppSettings; private DssDbContext _DssDBContext; + private DssUserIdentity _UserIdentity; + private DssUserIdentity _OriginalUserIdentity; public TermsAndConditions(SeleniumDriver Driver) { @@ -42,31 +45,34 @@ public TermsAndConditions(SeleniumDriver Driver) _AppSettings = new AppSettings(); } + [SetUp] + public void TestSetUp() + { + DbContextOptions dbContextOptions = new DbContextOptions(); + _DssDBContext = new DssDbContext(dbContextOptions); + } + [Given(@"User ""(.*)"" is enabled, approved, has the correct roles ""(.*)"", but has not accepted TOC")] - public void TestSetup(string UserEmail, string UserType) + public void UserIsEnabledApprovedAndHasCorrectRoles(string UserEmail, string UserType) { _TestEmail = UserEmail; _TestUserType = UserType; - - DbContextOptions dbContextOptions = new DbContextOptions(); - _DssDBContext = new DssDbContext(dbContextOptions); - // Retrieve the role DssUserRole userRole = _DssDBContext.DssUserRoles.FirstOrDefault(p => p.UserRoleCd == _TestUserType); // Retrieve the user identity - var identity = _DssDBContext.DssUserIdentities.FirstOrDefault(p => p.EmailAddressDsc == _TestEmail); + _UserIdentity = _DssDBContext.DssUserIdentities.FirstOrDefault(p => p.EmailAddressDsc == _TestEmail); // Update properties of the identity - identity.AccessRequestStatusCd = "Approved"; - identity.IsEnabled = true; - identity.TermsAcceptanceDtm = null; - identity.RepresentedByOrganizationId = 1; + _UserIdentity.AccessRequestStatusCd = "Approved"; + _UserIdentity.IsEnabled = true; + _UserIdentity.TermsAcceptanceDtm = null; + _UserIdentity.RepresentedByOrganizationId = 1; _DssDBContext.SaveChanges(); - userRole.UserIdentities.Add(identity); + userRole.UserIdentities.Add(_UserIdentity); // Add the identity to the CEU Admin role try @@ -84,7 +90,7 @@ public void TestSetup(string UserEmail, string UserType) //User Authentication //[Given(@"that I am an authenticated user ""(.*)"" and the expected result is ""(.*)""")] [Given(@"that I am an authenticated User ""(.*)"" and the expected result is ""(.*)"" and I am a ""(.*)"" user")] - public void GivenIAmAauthenticatedGovernmentUser(string UserName, string ExpectedResult, string UserType) + public void GivenIAmAauthenticatedGovernmentUser(string UserName, string ExpectedResult, string RoleName) { _TestUserName = UserName; _TestPassword = _AppSettings.GetUser(_TestUserName) ?? string.Empty; @@ -92,7 +98,7 @@ public void GivenIAmAauthenticatedGovernmentUser(string UserName, string Expecte UserHelper userHelper = new UserHelper(); - _UserType = userHelper.SetUserType(UserType); + _UserType = userHelper.SetUserType(RoleName); } @@ -239,5 +245,15 @@ public void TOCFlagWillBeSetToTrue() public void IWillNotHaveToAcceptTheTOC() { } + + [TearDown] + public void TestTearDown() + { + //restore original User Identity + + _UserIdentity = _OriginalUserIdentity; + + _DssDBContext.SaveChanges(); + } } } From c5327eba7bc77ba9304f477218fbef15f400c6e1 Mon Sep 17 00:00:00 2001 From: Rick Anderson Date: Mon, 10 Jun 2024 13:06:27 -0700 Subject: [PATCH 2/9] Added UploadListingDataPlatform --- .../UploadListingDataPlatformUser.feature | 84 ++++++++ .../UploadListingDataPlatformUser.feature.cs | 172 ++++++++++++++++ .../SpecFlowProjectBDD.csproj | 8 + .../UploadListingDataPlatformUser.cs | 194 ++++++++++++++++++ 4 files changed, 458 insertions(+) create mode 100644 Test/UITest/SpecFlowProjectBDD/Features/UploadListingDataPlatformUser.feature create mode 100644 Test/UITest/SpecFlowProjectBDD/Features/UploadListingDataPlatformUser.feature.cs create mode 100644 Test/UITest/SpecFlowProjectBDD/StepDefinitions/UploadListingDataPlatformUser.cs diff --git a/Test/UITest/SpecFlowProjectBDD/Features/UploadListingDataPlatformUser.feature b/Test/UITest/SpecFlowProjectBDD/Features/UploadListingDataPlatformUser.feature new file mode 100644 index 00000000..503f8e2b --- /dev/null +++ b/Test/UITest/SpecFlowProjectBDD/Features/UploadListingDataPlatformUser.feature @@ -0,0 +1,84 @@ +Feature: UploadListingDataPlatformUser +Link to a feature: https://hous-hpb.atlassian.net/browse/DSS-23 + +@UploadListingData +Scenario: UploadListingDataPlatformUser +#Platform Staff Authentication: + Given I am an authenticated platform representative "" with the necessary permissions and the expected result is "" and I am a "" user + +#Access to Data Sharing System: + When I access the Data Sharing System + + Then I should have the option to upload short-term listing data + + + +#Initiate Upload Process: + + When I opt to upload short-term listing data + + Then the upload data interface should load + +#CSV File Selection: + + Given I am on the upload data interface + + When I select a CSV file containing short-term listing data + +#Month Designation: + + And I select which month the STR listing data is for + +#Validation rules + +#Users cannot upload STR listing data for future month +# +#Users can upload STR listing data for previous months + +#Initiate Upload: + + When I initiate the upload + + Then the Data Sharing System should import the STR listing data + +#Successful Upload: + + When the data import is successful + + Then I should see a success message + + And a new entry on an upload log with a timestamp, username, and the number of records created. + +#Unsuccessful Upload: + + When the data import is not successful + + Then I should see a confirmation message indicating the issue. + + And a new entry on an import log with a timestamp, username, and information about the unsuccessful import, such as error details. + +#Validation -need to be defined + +#Email Confirmation: + + When the data import is complete + + Then i should receive an email confirming the status of my upload: Template: Platform Upload Error Notification + + And a report of any error codes that need to be addressed + +#Testing: + +#Conduct thorough testing to validate the functionality of the upload process and associated features under various scenarios. + + +Examples: + | UserName | UserType | Environment | ExpectedResult | + | STRDSSVrboDev | platform_staff | dev | pass | + #| STRDSSAirbnbDev | platform_staff | test | pass | + + + + + + diff --git a/Test/UITest/SpecFlowProjectBDD/Features/UploadListingDataPlatformUser.feature.cs b/Test/UITest/SpecFlowProjectBDD/Features/UploadListingDataPlatformUser.feature.cs new file mode 100644 index 00000000..4ee5a1ac --- /dev/null +++ b/Test/UITest/SpecFlowProjectBDD/Features/UploadListingDataPlatformUser.feature.cs @@ -0,0 +1,172 @@ +// ------------------------------------------------------------------------------ +// +// This code was generated by SpecFlow (https://www.specflow.org/). +// SpecFlow Version:3.9.0.0 +// SpecFlow Generator Version:3.9.0.0 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +// ------------------------------------------------------------------------------ +#region Designer generated code +#pragma warning disable +namespace SpecFlowProjectBDD.Features +{ + using TechTalk.SpecFlow; + using System; + using System.Linq; + + + [System.CodeDom.Compiler.GeneratedCodeAttribute("TechTalk.SpecFlow", "3.9.0.0")] + [System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [NUnit.Framework.TestFixtureAttribute()] + [NUnit.Framework.DescriptionAttribute("UploadListingDataPlatformUser")] + public partial class UploadListingDataPlatformUserFeature + { + + private TechTalk.SpecFlow.ITestRunner testRunner; + + private static string[] featureTags = ((string[])(null)); + +#line 1 "UploadListingDataPlatformUser.feature" +#line hidden + + [NUnit.Framework.OneTimeSetUpAttribute()] + public virtual void FeatureSetup() + { + testRunner = TechTalk.SpecFlow.TestRunnerManager.GetTestRunner(); + TechTalk.SpecFlow.FeatureInfo featureInfo = new TechTalk.SpecFlow.FeatureInfo(new System.Globalization.CultureInfo("en-US"), "Features", "UploadListingDataPlatformUser", "Link to a feature: https://hous-hpb.atlassian.net/browse/DSS-23", ProgrammingLanguage.CSharp, featureTags); + testRunner.OnFeatureStart(featureInfo); + } + + [NUnit.Framework.OneTimeTearDownAttribute()] + public virtual void FeatureTearDown() + { + testRunner.OnFeatureEnd(); + testRunner = null; + } + + [NUnit.Framework.SetUpAttribute()] + public void TestInitialize() + { + } + + [NUnit.Framework.TearDownAttribute()] + public void TestTearDown() + { + testRunner.OnScenarioEnd(); + } + + public void ScenarioInitialize(TechTalk.SpecFlow.ScenarioInfo scenarioInfo) + { + testRunner.OnScenarioInitialize(scenarioInfo); + testRunner.ScenarioContext.ScenarioContainer.RegisterInstanceAs(NUnit.Framework.TestContext.CurrentContext); + } + + public void ScenarioStart() + { + testRunner.OnScenarioStart(); + } + + public void ScenarioCleanup() + { + testRunner.CollectScenarioErrors(); + } + + [NUnit.Framework.TestAttribute()] + [NUnit.Framework.DescriptionAttribute("UploadListingDataPlatformUser")] + [NUnit.Framework.CategoryAttribute("UploadListingData")] + [NUnit.Framework.TestCaseAttribute("STRDSSVrboDev", "platform_staff", "dev", "pass", null)] + public void UploadListingDataPlatformUser(string userName, string userType, string environment, string expectedResult, string[] exampleTags) + { + string[] @__tags = new string[] { + "UploadListingData"}; + if ((exampleTags != null)) + { + @__tags = System.Linq.Enumerable.ToArray(System.Linq.Enumerable.Concat(@__tags, exampleTags)); + } + string[] tagsOfScenario = @__tags; + System.Collections.Specialized.OrderedDictionary argumentsOfScenario = new System.Collections.Specialized.OrderedDictionary(); + argumentsOfScenario.Add("UserName", userName); + argumentsOfScenario.Add("UserType", userType); + argumentsOfScenario.Add("Environment", environment); + argumentsOfScenario.Add("ExpectedResult", expectedResult); + TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("UploadListingDataPlatformUser", null, tagsOfScenario, argumentsOfScenario, featureTags); +#line 5 +this.ScenarioInitialize(scenarioInfo); +#line hidden + if ((TagHelper.ContainsIgnoreTag(tagsOfScenario) || TagHelper.ContainsIgnoreTag(featureTags))) + { + testRunner.SkipScenario(); + } + else + { + this.ScenarioStart(); +#line 7 + testRunner.Given(string.Format("I am an authenticated platform representative \"{0}\" with the necessary permission" + + "s and the expected result is \"{1}\" and I am a \"{2}\" user", userName, expectedResult, userType), ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Given "); +#line hidden +#line 10 + testRunner.When("I access the Data Sharing System", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "When "); +#line hidden +#line 12 + testRunner.Then("I should have the option to upload short-term listing data", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Then "); +#line hidden +#line 18 + testRunner.When("I opt to upload short-term listing data", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "When "); +#line hidden +#line 20 + testRunner.Then("the upload data interface should load", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Then "); +#line hidden +#line 24 + testRunner.Given("I am on the upload data interface", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Given "); +#line hidden +#line 26 + testRunner.When("I select a CSV file containing short-term listing data", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "When "); +#line hidden +#line 30 + testRunner.And("I select which month the STR listing data is for", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); +#line hidden +#line 40 + testRunner.When("I initiate the upload", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "When "); +#line hidden +#line 42 + testRunner.Then("the Data Sharing System should import the STR listing data", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Then "); +#line hidden +#line 46 + testRunner.When("the data import is successful", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "When "); +#line hidden +#line 48 + testRunner.Then("I should see a success message", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Then "); +#line hidden +#line 50 + testRunner.And("a new entry on an upload log with a timestamp, username, and the number of record" + + "s created.", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); +#line hidden +#line 54 + testRunner.When("the data import is not successful", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "When "); +#line hidden +#line 56 + testRunner.Then("I should see a confirmation message indicating the issue.", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Then "); +#line hidden +#line 58 + testRunner.And("a new entry on an import log with a timestamp, username, and information about th" + + "e unsuccessful import, such as error details.", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); +#line hidden +#line 64 + testRunner.When("the data import is complete", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "When "); +#line hidden +#line 66 + testRunner.Then("i should receive an email confirming the status of my upload: Template: Platform " + + "Upload Error Notification", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Then "); +#line hidden +#line 68 + testRunner.And("a report of any error codes that need to be addressed", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); +#line hidden + } + this.ScenarioCleanup(); + } + } +} +#pragma warning restore +#endregion diff --git a/Test/UITest/SpecFlowProjectBDD/SpecFlowProjectBDD.csproj b/Test/UITest/SpecFlowProjectBDD/SpecFlowProjectBDD.csproj index c7384fa5..d8c52771 100644 --- a/Test/UITest/SpecFlowProjectBDD/SpecFlowProjectBDD.csproj +++ b/Test/UITest/SpecFlowProjectBDD/SpecFlowProjectBDD.csproj @@ -9,6 +9,7 @@ + @@ -38,6 +39,9 @@ true true + + UploadListingDataPlatformUser.feature + @@ -55,6 +59,10 @@ $(UsingMicrosoftNETSdk) %(RelativeDir)%(Filename).feature$(DefaultLanguageSourceExtension) + + $(UsingMicrosoftNETSdk) + %(RelativeDir)%(Filename).feature$(DefaultLanguageSourceExtension) + $(UsingMicrosoftNETSdk) %(RelativeDir)%(Filename).feature$(DefaultLanguageSourceExtension) diff --git a/Test/UITest/SpecFlowProjectBDD/StepDefinitions/UploadListingDataPlatformUser.cs b/Test/UITest/SpecFlowProjectBDD/StepDefinitions/UploadListingDataPlatformUser.cs new file mode 100644 index 00000000..a3942a44 --- /dev/null +++ b/Test/UITest/SpecFlowProjectBDD/StepDefinitions/UploadListingDataPlatformUser.cs @@ -0,0 +1,194 @@ +using Configuration; +using NUnit.Framework.Legacy; +using OpenQA.Selenium; +using SpecFlowProjectBDD.Helpers; +using System; +using TechTalk.SpecFlow; +using TestFrameWork.Models; +using UITest.PageObjects; +using UITest.TestDriver; +using static SpecFlowProjectBDD.SFEnums; + +namespace SpecFlowProjectBDD.StepDefinitions +{ + [Binding] + public class UploadListingDataPlatformUser + { + private IDriver _Driver; + private LandingPage _LandingPage; + private DelistingWarningPage _DelistingWarningPage; + private TermsAndConditionsPage _TermsAndConditionsPage; + private PathFinderPage _PathFinderPage; + private IDirLoginPage _IDRLoginPage; + private NoticeOfTakeDownPage _NoticeOfTakeDownPage; + private string _TestUserName; + private string _TestPassword; + private bool _ExpectedResult = false; + private AppSettings _AppSettings; + private SFEnums.UserTypeEnum _UserType; + private SFEnums.LogonTypeEnum _LogonType; + private BCIDPage _BCIDPage; + + public UploadListingDataPlatformUser(SeleniumDriver Driver) + { + _Driver = Driver; + _LandingPage = new LandingPage(_Driver); + _DelistingWarningPage = new DelistingWarningPage(_Driver); + _TermsAndConditionsPage = new TermsAndConditionsPage(Driver); + _NoticeOfTakeDownPage = new NoticeOfTakeDownPage(_Driver); + _PathFinderPage = new PathFinderPage(_Driver); + _IDRLoginPage = new IDirLoginPage(_Driver); + _BCIDPage = new BCIDPage(_Driver); + _AppSettings = new AppSettings(); + } + + + [Given(@"I am an authenticated platform representative ""([^""]*)"" with the necessary permissions and the expected result is ""([^""]*)"" and I am a ""([^""]*)"" user")] + public void GivenIAmAnAuthenticatedPlatformRepresentativeWithTheNecessaryPermissionsAndTheExpectedResultIsAndIAmAUser(string UserName, string ExpectedResult, string UserType) + { + _TestUserName = UserName; + _TestPassword = _AppSettings.GetUser(_TestUserName) ?? string.Empty; + _ExpectedResult = ExpectedResult.ToUpper() == "PASS" ? true : false; + + _Driver.Url = _AppSettings.GetServer("default"); + _Driver.Navigate(); + + AuthHelper authHelper = new AuthHelper(_Driver); + UserHelper userHelper = new UserHelper(); + + _UserType = userHelper.SetUserType(UserType); + //Authenticate user using IDir or BCID depending on the user + _LogonType = authHelper.Authenticate(UserName, _UserType); + } + + [When(@"I access the Data Sharing System")] + public void WhenIAccessTheDataSharingSystem() + { + IWebElement TOC = null; + + try + { + TOC = _LandingPage.Driver.FindElement(Enums.FINDBY.CSSSELECTOR, TermsAndConditionsModel.TermsAndCondititionsCheckBox); + } + catch (NoSuchElementException ex) + { + //no Terms and Conditions. Continue + } + + + if ((null != TOC) && (TOC.Displayed)) + { + //Nested Angular controls obscure the TermsAndConditionsCheckbox. Need JS + _TermsAndConditionsPage.TermsAndConditionsCheckBox.ExecuteJavaScript(@"document.querySelector(""body > app-root > app-layout > div.content > app-terms-and-conditions > p-card > div > div.p-card-body > div > div > div.checkbox-container > p-checkbox > div > div.p-checkbox-box"").click()"); + _TermsAndConditionsPage.ContinueButton.Click(); + } + } + + [Then("I should have the option to upload short-term listing data")] + public void IShouldHaveTheOptionToUploadShorttermlistingData() + { + if (_UserType == UserTypeEnum.SHORTTERMRENTALPLATFORM) + { + ClassicAssert.True(_LandingPage.Upload_ListingsButton.IsEnabled()); + } + } + + [When(@"I opt to upload short-term listing data")] + public void WhenIOptToUploadShort_TermListingData() + { + ////throw new PendingStepException(); + } + + [Then(@"the upload data interface should load")] + public void ThenTheUploadDataInterfaceShouldLoad() + { + //throw new PendingStepException(); + } + + + [Given(@"I am on the upload data interface")] + public void GivenIAmOnTheUploadDataInterface() + { + //throw new PendingStepException(); + } + + [When(@"I select a CSV file containing short-term listing data")] + public void WhenISelectACSVFileContainingShort_TermListingData() + { + //throw new PendingStepException(); + } + + [When(@"I select which month the STR listing data is for")] + public void WhenISelectWhichMonthTheSTRListingDataIsFor() + { + //throw new PendingStepException(); + } + + [When(@"I initiate the upload")] + public void WhenIInitiateTheUpload() + { + //throw new PendingStepException(); + } + + [Then(@"the Data Sharing System should import the STR listing data")] + public void ThenTheDataSharingSystemShouldImportTheSTRListingData() + { + //throw new PendingStepException(); + } + + [When(@"the data import is successful")] + public void WhenTheDataImportIsSuccessful() + { + //throw new PendingStepException(); + } + + [Then(@"I should see a success message")] + public void ThenIShouldSeeASuccessMessage() + { + //throw new PendingStepException(); + } + + [Then(@"a new entry on an upload log with a timestamp, username, and the number of records created\.")] + public void ThenANewEntryOnAnUploadLogWithATimestampUsernameAndTheNumberOfRecordsCreated_() + { + //throw new PendingStepException(); + } + + [When(@"the data import is not successful")] + public void WhenTheDataImportIsNotSuccessful() + { + //throw new PendingStepException(); + } + + [Then(@"I should see a confirmation message indicating the issue\.")] + public void ThenIShouldSeeAConfirmationMessageIndicatingTheIssue_() + { + //throw new PendingStepException(); + } + + [Then(@"a new entry on an import log with a timestamp, username, and information about the unsuccessful import, such as error details\.")] + public void ThenANewEntryOnAnImportLogWithATimestampUsernameAndInformationAboutTheUnsuccessfulImportSuchAsErrorDetails_() + { + //throw new PendingStepException(); + } + + [When(@"the data import is complete")] + public void WhenTheDataImportIsComplete() + { + //throw new PendingStepException(); + } + + [Then(@"i should receive an email confirming the status of my upload: Template: Platform Upload Error Notification")] + public void ThenIShouldReceiveAnEmailConfirmingTheStatusOfMyUploadTemplatePlatformUploadErrorNotification() + { + //throw new PendingStepException(); + } + + [Then(@"a report of any error codes that need to be addressed")] + public void ThenAReportOfAnyErrorCodesThatNeedToBeAddressed() + { + //throw new PendingStepException(); + } + + } +} From c5c6be4190a97e34103023ccb070cc88b3e34930 Mon Sep 17 00:00:00 2001 From: Rick Anderson Date: Thu, 13 Jun 2024 11:35:39 -0700 Subject: [PATCH 3/9] Added Upload Listing scenario. Incomplete --- Test/UITest/Configuration/AppSettings.cs | 7 ++ Test/UITest/MOHShortTermRentalTest.sln | 6 + .../Features/DenyAccessToSystem.feature | 2 +- .../Features/DenyAccessToSystem.feature.cs | 4 +- .../UploadListingDataPlatformUser.feature | 6 +- .../SpecFlowProjectBDD.csproj | 4 +- .../UploadListingDataPlatformUser.cs | 19 +-- .../listing files/listing-valid-2024-02.csv | 7 ++ .../listing files/listing-valid-2024-03.csv | 7 ++ .../listing files/listing-valid-2024-04.csv | 119 ++++++++++++++++++ .../Models/UploadListingsModel.cs | 16 +++ .../PageObjects/UploadListingsPage.cs | 26 ++++ .../WinFormsLibrary1/Controls/FileDialog.cs | 41 ++++++ .../WinFormsLibrary1/WindowsAutomation.csproj | 15 +++ 14 files changed, 264 insertions(+), 15 deletions(-) create mode 100644 Test/UITest/TestData/listing files/listing-valid-2024-02.csv create mode 100644 Test/UITest/TestData/listing files/listing-valid-2024-03.csv create mode 100644 Test/UITest/TestData/listing files/listing-valid-2024-04.csv create mode 100644 Test/UITest/TestFrameWork/Models/UploadListingsModel.cs create mode 100644 Test/UITest/TestFrameWork/PageObjects/UploadListingsPage.cs create mode 100644 Test/UITest/WinFormsLibrary1/Controls/FileDialog.cs create mode 100644 Test/UITest/WinFormsLibrary1/WindowsAutomation.csproj diff --git a/Test/UITest/Configuration/AppSettings.cs b/Test/UITest/Configuration/AppSettings.cs index f3d506e9..fd0904e6 100644 --- a/Test/UITest/Configuration/AppSettings.cs +++ b/Test/UITest/Configuration/AppSettings.cs @@ -10,6 +10,7 @@ public class AppSettings private IConfigurationSection _UsersSection; private IConfigurationSection _ServersSection; private IConfiguration _ConnectionStringSection; + private IConfiguration _ListingFilesSection; public AppSettings() { @@ -18,6 +19,7 @@ public AppSettings() _UsersSection = _Configuration.GetSection("Users"); _ServersSection = _Configuration.GetSection("Servers"); _ConnectionStringSection = _Configuration.GetSection("ConnectionStrings"); + _ListingFilesSection = _Configuration.GetSection("ListingFiles"); } public string GetUser(string Key) @@ -33,6 +35,11 @@ public string GetConnectionString(string key) { return (_ConnectionStringSection[key]); } + + public string GetListingFile(string key) + { + return (_ListingFilesSection[key]); + } } } diff --git a/Test/UITest/MOHShortTermRentalTest.sln b/Test/UITest/MOHShortTermRentalTest.sln index 93463959..a3e600ed 100644 --- a/Test/UITest/MOHShortTermRentalTest.sln +++ b/Test/UITest/MOHShortTermRentalTest.sln @@ -13,6 +13,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ConfigurationUnitTests", "C EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DataBase", "DataBase\DataBase.csproj", "{47E59E4B-9824-4E49-B1A6-C956402679A8}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WindowsAutomation", "WinFormsLibrary1\WindowsAutomation.csproj", "{213BAB38-0602-4072-BA0A-8F3F3B85CF08}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -39,6 +41,10 @@ Global {47E59E4B-9824-4E49-B1A6-C956402679A8}.Debug|Any CPU.Build.0 = Debug|Any CPU {47E59E4B-9824-4E49-B1A6-C956402679A8}.Release|Any CPU.ActiveCfg = Release|Any CPU {47E59E4B-9824-4E49-B1A6-C956402679A8}.Release|Any CPU.Build.0 = Release|Any CPU + {213BAB38-0602-4072-BA0A-8F3F3B85CF08}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {213BAB38-0602-4072-BA0A-8F3F3B85CF08}.Debug|Any CPU.Build.0 = Debug|Any CPU + {213BAB38-0602-4072-BA0A-8F3F3B85CF08}.Release|Any CPU.ActiveCfg = Release|Any CPU + {213BAB38-0602-4072-BA0A-8F3F3B85CF08}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/Test/UITest/SpecFlowProjectBDD/Features/DenyAccessToSystem.feature b/Test/UITest/SpecFlowProjectBDD/Features/DenyAccessToSystem.feature index 0cc409d3..24ada7a2 100644 --- a/Test/UITest/SpecFlowProjectBDD/Features/DenyAccessToSystem.feature +++ b/Test/UITest/SpecFlowProjectBDD/Features/DenyAccessToSystem.feature @@ -1,7 +1,7 @@ Feature: DenyAccessToSystem Link to a feature: https://hous-hpb.atlassian.net/browse/DSS-75 -@Access +@Access @Headless Scenario: DenyAccessToSystem #User Authentication diff --git a/Test/UITest/SpecFlowProjectBDD/Features/DenyAccessToSystem.feature.cs b/Test/UITest/SpecFlowProjectBDD/Features/DenyAccessToSystem.feature.cs index 545b0bf9..fda968fa 100644 --- a/Test/UITest/SpecFlowProjectBDD/Features/DenyAccessToSystem.feature.cs +++ b/Test/UITest/SpecFlowProjectBDD/Features/DenyAccessToSystem.feature.cs @@ -76,11 +76,13 @@ public void ScenarioCleanup() [NUnit.Framework.TestAttribute()] [NUnit.Framework.DescriptionAttribute("DenyAccessToSystem")] [NUnit.Framework.CategoryAttribute("Access")] + [NUnit.Framework.CategoryAttribute("Headless")] [NUnit.Framework.TestCaseAttribute("CEUATST", "ceuatst@gov.bc.ca", "ceu_admin", "HappyPath", "pass", null)] public void DenyAccessToSystem(string userName, string email, string roleName, string description, string expectedResult, string[] exampleTags) { string[] @__tags = new string[] { - "Access"}; + "Access", + "Headless"}; if ((exampleTags != null)) { @__tags = System.Linq.Enumerable.ToArray(System.Linq.Enumerable.Concat(@__tags, exampleTags)); diff --git a/Test/UITest/SpecFlowProjectBDD/Features/UploadListingDataPlatformUser.feature b/Test/UITest/SpecFlowProjectBDD/Features/UploadListingDataPlatformUser.feature index 503f8e2b..bcafca39 100644 --- a/Test/UITest/SpecFlowProjectBDD/Features/UploadListingDataPlatformUser.feature +++ b/Test/UITest/SpecFlowProjectBDD/Features/UploadListingDataPlatformUser.feature @@ -73,9 +73,9 @@ Scenario: UploadListingDataPlatformUser Examples: - | UserName | UserType | Environment | ExpectedResult | - | STRDSSVrboDev | platform_staff | dev | pass | - #| STRDSSAirbnbDev | platform_staff | test | pass | + | UserName | UserType | Environment | ExpectedResult | + | STRDSSVrboDev | platform_staff | dev | pass | + #| STRDSSAirbnbDev | platform_staff | dev | pass | diff --git a/Test/UITest/SpecFlowProjectBDD/SpecFlowProjectBDD.csproj b/Test/UITest/SpecFlowProjectBDD/SpecFlowProjectBDD.csproj index d8c52771..0be5a84b 100644 --- a/Test/UITest/SpecFlowProjectBDD/SpecFlowProjectBDD.csproj +++ b/Test/UITest/SpecFlowProjectBDD/SpecFlowProjectBDD.csproj @@ -30,6 +30,7 @@ + @@ -39,9 +40,6 @@ true true - - UploadListingDataPlatformUser.feature - diff --git a/Test/UITest/SpecFlowProjectBDD/StepDefinitions/UploadListingDataPlatformUser.cs b/Test/UITest/SpecFlowProjectBDD/StepDefinitions/UploadListingDataPlatformUser.cs index a3942a44..4cc235d0 100644 --- a/Test/UITest/SpecFlowProjectBDD/StepDefinitions/UploadListingDataPlatformUser.cs +++ b/Test/UITest/SpecFlowProjectBDD/StepDefinitions/UploadListingDataPlatformUser.cs @@ -7,6 +7,7 @@ using TestFrameWork.Models; using UITest.PageObjects; using UITest.TestDriver; +using TestFrameWork.WindowsAutomation.Controls; using static SpecFlowProjectBDD.SFEnums; namespace SpecFlowProjectBDD.StepDefinitions @@ -16,13 +17,13 @@ public class UploadListingDataPlatformUser { private IDriver _Driver; private LandingPage _LandingPage; - private DelistingWarningPage _DelistingWarningPage; private TermsAndConditionsPage _TermsAndConditionsPage; private PathFinderPage _PathFinderPage; private IDirLoginPage _IDRLoginPage; - private NoticeOfTakeDownPage _NoticeOfTakeDownPage; + private UploadListingsPage _UploadListingsPage; private string _TestUserName; private string _TestPassword; + private string _listingFile; private bool _ExpectedResult = false; private AppSettings _AppSettings; private SFEnums.UserTypeEnum _UserType; @@ -33,12 +34,11 @@ public UploadListingDataPlatformUser(SeleniumDriver Driver) { _Driver = Driver; _LandingPage = new LandingPage(_Driver); - _DelistingWarningPage = new DelistingWarningPage(_Driver); _TermsAndConditionsPage = new TermsAndConditionsPage(Driver); - _NoticeOfTakeDownPage = new NoticeOfTakeDownPage(_Driver); _PathFinderPage = new PathFinderPage(_Driver); _IDRLoginPage = new IDirLoginPage(_Driver); _BCIDPage = new BCIDPage(_Driver); + _UploadListingsPage = new UploadListingsPage(_Driver); _AppSettings = new AppSettings(); } @@ -50,6 +50,8 @@ public void GivenIAmAnAuthenticatedPlatformRepresentativeWithTheNecessaryPermiss _TestPassword = _AppSettings.GetUser(_TestUserName) ?? string.Empty; _ExpectedResult = ExpectedResult.ToUpper() == "PASS" ? true : false; + _listingFile = _AppSettings.GetListingFile("File1"); + _Driver.Url = _AppSettings.GetServer("default"); _Driver.Navigate(); @@ -102,7 +104,7 @@ public void WhenIOptToUploadShort_TermListingData() [Then(@"the upload data interface should load")] public void ThenTheUploadDataInterfaceShouldLoad() { - //throw new PendingStepException(); + _LandingPage.Upload_ListingsButton.Click(); } @@ -115,13 +117,16 @@ public void GivenIAmOnTheUploadDataInterface() [When(@"I select a CSV file containing short-term listing data")] public void WhenISelectACSVFileContainingShort_TermListingData() { - //throw new PendingStepException(); + _UploadListingsPage.SelectFileButton.Click(); + FileDialog fileDialog = new FileDialog(); + fileDialog.FindAndSet("C:\\Users\\RAnderson\\Source\\Repos\\House-Policy-STRDSS\\Test\\UITest\\TestData\\listing files\\listing-valid-2024-04.csv", "Open", "007C2B0C"); + } [When(@"I select which month the STR listing data is for")] public void WhenISelectWhichMonthTheSTRListingDataIsFor() { - //throw new PendingStepException(); + _UploadListingsPage.ReportingMonthDropDown.Click(); } [When(@"I initiate the upload")] diff --git a/Test/UITest/TestData/listing files/listing-valid-2024-02.csv b/Test/UITest/TestData/listing files/listing-valid-2024-02.csv new file mode 100644 index 00000000..f232d082 --- /dev/null +++ b/Test/UITest/TestData/listing files/listing-valid-2024-02.csv @@ -0,0 +1,7 @@ +rpt_period,org_cd,listing_id,listing_url,rental_address,bus_lic_no,bc_reg_no,is_entire_unit,bedrooms_qty,nights_booked_qty,reservations_qty,property_host_nm,property_host_email,property_host_phone,property_host_fax,property_host_address,supplier_host_1_nm,supplier_host_1_email,supplier_host_1_phone,supplier_host_1_fax,supplier_host_1_address,supplier_host_1_id,supplier_host_2_nm,supplier_host_2_email,supplier_host_2_phone,supplier_host_2_fax,supplier_host_2_address,supplier_host_2_id,supplier_host_3_nm,supplier_host_3_email,supplier_host_3_phone,supplier_host_3_fax,supplier_host_3_address,supplier_host_3_id,supplier_host_4_nm,supplier_host_4_email,supplier_host_4_phone,supplier_host_4_fax,supplier_host_4_address,supplier_host_4_id,supplier_host_5_nm,supplier_host_5_email,supplier_host_5_phone,supplier_host_5_fax,supplier_host_5_address,supplier_host_5_id +2024-02,PLATFORMTEST,1000001,https://example.com/1000001/,"739 McCallum Rd, Langford, BC V9B 6M1",54321,987654,Y,2,24,8,Teresa Homeowner,teresa.homeowner@my.email,123-456-7890,,"739 McCallum Rd, Langford, BC V9B 6M1",Bob Lister,bob.lister@my.email,987-654-3210,987-654-3211,"23904 Fraser Hwy, Langley Twp, BC V2Z 2K8",654987321,,,,,,,,,,,,,,,,,,,,,,,, +2024-02,PLATFORMTEST,1000002,https://example.com/1000002/,"125 Atkins Rd, Victoria, BC V9B 6V4",54321,987654,Y,2,24,8,Teresa Homeowner,teresa.homeowner@my.email ,123-456-7890,,"125 Atkins Rd, Victoria, BC V9B 6V4",Bob Lister,bob.lister@my.email,987-654-3210,987-654-3211,"23668 36a Ave, Langley Twp, BC V4Z 2J6",654987321,,,,,,,,,,,,,,,,,,,,,,,, +2024-02,PLATFORMTEST,1000003,https://example.com/1000003/,"2180 Ridgedown Pl, Saanichton, BC V8M 2H7",54321,987654,Y,2,24,8,Teresa Homeowner,teresa.homeowner@my.email,123-456-7890,,"2180 Ridgedown Pl, Saanichton, BC V8M 2H7",Bob Lister,bob.lister@my.email,987-654-3210,987-654-3211,"23904 Fraser Hwy, Langley Twp, BC V2Z 2K8",654987321,,,,,,,,,,,,,,,,,,,,,,,, +2024-02,PLATFORMTEST,1000004,https://example.com/1000004/,"23904 Fraser Hwy, Langley Twp, BC V2Z 2K8",54321,987654,Y,2,24,8,Teresa Homeowner,teresa.homeowner@my.email,123-456-7890,,"Unit 5 456 Example St. My City, BC V0V 0V0",Bob Lister,bob.lister@my.email,987-654-3210,987-654-3211,"8901 Another Way My City, BC V0V 0V0",654987321,,,,,,,,,,,,,,,,,,,,,,,, +2024-02,PLATFORMTEST,1000005,https://example.com/2000005/,"Unit 5 456 Example St. My City, BC",54321,987654,Y,2,24,8,Teresa Homeowner,teresa.homeowner@my.email,123-456-7890,,"Unit 6 456 Example St. My City, BC V0V 0V0",Bob Lister,bob.lister@my.email,987-654-3210,987-654-3211,"9012 Another Way My City, BC V0V 0V0",654987321,,,,,,,,,,,,,,,,,,,,,,,, +2024-02,PLATFORMTEST,1000006,https://example.com/1000006/,"Unit 6 456 Example St. My City, BC",54321,987654,Y,2,24,8,Teresa Homeowner,teresa.homeowner@my.email,123-456-7890,,"Unit 7 456 Example St. My City, BC V0V 0V0",Bob Lister,bob.lister@my.email,987-654-3210,987-654-3211,"0123 Another Way My City, BC V0V 0V0",654987321,,,,,,,,,,,,,,,,,,,,,,,, diff --git a/Test/UITest/TestData/listing files/listing-valid-2024-03.csv b/Test/UITest/TestData/listing files/listing-valid-2024-03.csv new file mode 100644 index 00000000..c339bf50 --- /dev/null +++ b/Test/UITest/TestData/listing files/listing-valid-2024-03.csv @@ -0,0 +1,7 @@ +rpt_period,org_cd,listing_id,listing_url,rental_address,bus_lic_no,bc_reg_no,is_entire_unit,bedrooms_qty,nights_booked_qty,reservations_qty,property_host_nm,property_host_email,property_host_phone,property_host_fax,property_host_address,supplier_host_1_nm,supplier_host_1_email,supplier_host_1_phone,supplier_host_1_fax,supplier_host_1_address,supplier_host_1_id,supplier_host_2_nm,supplier_host_2_email,supplier_host_2_phone,supplier_host_2_fax,supplier_host_2_address,supplier_host_2_id,supplier_host_3_nm,supplier_host_3_email,supplier_host_3_phone,supplier_host_3_fax,supplier_host_3_address,supplier_host_3_id,supplier_host_4_nm,supplier_host_4_email,supplier_host_4_phone,supplier_host_4_fax,supplier_host_4_address,supplier_host_4_id,supplier_host_5_nm,supplier_host_5_email,supplier_host_5_phone,supplier_host_5_fax,supplier_host_5_address,supplier_host_5_id +2024-03,PLATFORMTEST,1000002,https://example.com/1000002/,"125 Atkins Rd, Victoria, BC V9B 6V4",54321,987654,Y,2,24,8,Teresa Homeowner,teresa.homeowner@my.email ,123-456-7890,,"125 Atkins Rd, Victoria, BC V9B 6V4",Bob Lister,bob.lister@my.email,987-654-3210,987-654-3211,"23668 36a Ave, Langley Twp, BC V4Z 2J6",654987321,,,,,,,,,,,,,,,,,,,,,,,, +2024-03,PLATFORMTEST,1000003,https://example.com/1000003/,"2180 Ridgedown Pl, Saanichton, BC V8M 2H7",54321,987654,Y,2,24,8,Teresa Homeowner,teresa.homeowner@my.email,123-456-7890,,"2180 Ridgedown Pl, Saanichton, BC V8M 2H7",Bob Lister,bob.lister@my.email,987-654-3210,987-654-3211,"23904 Fraser Hwy, Langley Twp, BC V2Z 2K8",654987321,,,,,,,,,,,,,,,,,,,,,,,, +2024-03,PLATFORMTEST,1000004,https://example.com/1000004/,"23904 Fraser Hwy, Langley Twp, BC V2Z 2K8",54321,987654,Y,2,24,8,Teresa Homeowner,teresa.homeowner@my.email,123-456-7890,,"Unit 5 456 Example St. My City, BC V0V 0V0",Bob Lister,bob.lister@my.email,987-654-3210,987-654-3211,"8901 Another Way My City, BC V0V 0V0",654987321,,,,,,,,,,,,,,,,,,,,,,,, +2024-03,PLATFORMTEST,1000005,https://example.com/2000005/,"Unit 5 456 Example St. My City, BC",54321,987654,Y,2,24,8,Teresa Homeowner,teresa.homeowner@my.email,123-456-7890,,"Unit 6 456 Example St. My City, BC V0V 0V0",Bob Lister,bob.lister@my.email,987-654-3210,987-654-3211,"9012 Another Way My City, BC V0V 0V0",654987321,,,,,,,,,,,,,,,,,,,,,,,, +2024-03,PLATFORMTEST,1000006,https://example.com/1000006/,"Unit 6 456 Example St. My City, BC",54321,987654,Y,2,24,8,Teresa Homeowner,teresa.homeowner@my.email,123-456-7890,,"Unit 7 456 Example St. My City, BC V0V 0V0",Bob Lister,bob.lister@my.email,987-654-3210,987-654-3211,"0123 Another Way My City, BC V0V 0V0",654987321,,,,,,,,,,,,,,,,,,,,,,,, +2024-03,PLATFORMTEST,1000007,https://example.com/1000007/,"Unit 7 456 Example St. y City, BC",54321,987654,Y,2,24,8,Teresa Homeowner,teresa.homeowner@my.email,123-456-7890,,"Unit 8 456 Example St. My City, BC V0V 0V0",Bob Lister,bob.lister@my.email,987-654-3210,987-654-3211,"1234 Another Way My City, BC V0V 0V0",654987321,,,,,,,,,,,,,,,,,,,,,,,, diff --git a/Test/UITest/TestData/listing files/listing-valid-2024-04.csv b/Test/UITest/TestData/listing files/listing-valid-2024-04.csv new file mode 100644 index 00000000..61c3048e --- /dev/null +++ b/Test/UITest/TestData/listing files/listing-valid-2024-04.csv @@ -0,0 +1,119 @@ +rpt_period,org_cd,listing_id,listing_url,rental_address,bus_lic_no,bc_reg_no,is_entire_unit,bedrooms_qty,nights_booked_qty,reservations_qty,property_host_nm,property_host_email,property_host_phone,property_host_fax,property_host_address,supplier_host_1_nm,supplier_host_1_email,supplier_host_1_phone,supplier_host_1_fax,supplier_host_1_address,supplier_host_1_id,supplier_host_2_nm,supplier_host_2_email,supplier_host_2_phone,supplier_host_2_fax,supplier_host_2_address,supplier_host_2_id,supplier_host_3_nm,supplier_host_3_email,supplier_host_3_phone,supplier_host_3_fax,supplier_host_3_address,supplier_host_3_id,supplier_host_4_nm,supplier_host_4_email,supplier_host_4_phone,supplier_host_4_fax,supplier_host_4_address,supplier_host_4_id,supplier_host_5_nm,supplier_host_5_email,supplier_host_5_phone,supplier_host_5_fax,supplier_host_5_address,supplier_host_5_id +2024-04,PLATFORMTEST,1000002,https://example.com/1000002/,"125 Atkins Rd, Victoria, BC V9B 6V4",54321,987654,Y,2,24,8,Teresa Homeowner,teresa.homeowner@my.email ,123-456-7890,,"125 Atkins Rd, Victoria, BC V9B 6V4",Bob Lister,bob.lister@my.email,987-654-3210,987-654-3211,"23668 36a Ave, Langley Twp, BC V4Z 2J6",654987321,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000004,https://example.com/1000004/,"23904 Fraser Hwy, Langley Twp, BC V2Z 2K8",54321,987654,Y,2,24,8,Teresa Homeowner,teresa.homeowner@my.email,123-456-7890,,"Unit 5 456 Example St. My City, BC V0V 0V0",Bob Lister,bob.lister@my.email,987-654-3210,987-654-3211,"8901 Another Way My City, BC V0V 0V0",654987321,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000005,https://example.com/2000005/,"Unit 5 456 Example St. My City, BC",54321,987654,Y,2,24,8,Teresa Homeowner,teresa.homeowner@my.email,123-456-7890,,"Unit 6 456 Example St. My City, BC V0V 0V0",Bob Lister,bob.lister@my.email,987-654-3210,987-654-3211,"9012 Another Way My City, BC V0V 0V0",654987321,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000006,https://example.com/1000006/,"Unit 6 456 Example St. My City, BC",54321,987654,Y,2,24,8,Teresa Homeowner,teresa.homeowner@my.email,123-456-7890,,"Unit 7 456 Example St. My City, BC V0V 0V0",Bob Lister,bob.lister@my.email,987-654-3210,987-654-3211,"0123 Another Way My City, BC V0V 0V0",654987321,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000007,https://example.com/1000007/,"Unit 7 456 Example St. y City, BC",54321,987654,Y,2,24,8,Teresa Homeowner,teresa.homeowner@my.email,123-456-7890,,"Unit 8 456 Example St. My City, BC V0V 0V0",Bob Lister,bob.lister@my.email,987-654-3210,987-654-3211,"1234 Another Way My City, BC V0V 0V0",654987321,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000008,https://example.com/1000008/,"Unit 8 456 Example St. My City, BC",54321,987654,Y,2,24,8,Teresa Homeowner,teresa.homeowner@my.email,123-456-7890,,"Unit 9 456 Example St. My City, BC V0V 0V0",Bob Lister,bob.lister@my.email,987-654-3210,987-654-3211,"2345 Another Way My City, BC V0V 0V0",654987321,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000009,https://example.com/1000009/,"3445 272 St, Aldergrove, BC V4W 3H4",54321,987654,Y,2,24,8,Teresa Homeowner,teresa.homeowner@my.email,123-456-7890,,"Unit 10 456 Example St. My City, BC V0V 0V0",Bob Lister,bob.lister@my.email,987-654-3210,987-654-3211,"3456 Another Way My City, BC V0V 0V0",654987321,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000010,https://example.com/1000010/,"200 940 Blanshard St, Victoria, BC V8W 3E6",54321,987654,Y,2,24,8,Teresa Homeowner,teresa.homeowner@my.email,123-456-7890,,"Unit 11 456 Example St. My City, BC V0V 0V0",Bob Lister,bob.lister@my.email,987-654-3210,987-654-3211,"4567 Another Way My City, BC V0V 0V0",654987321,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000011,https://example.com/1000011/,"789 Main St, Vancouver, BC V6A 2H7",67890,123456,Y,3,30,12,John Doe,john.doe@my.email,234-567-8901,,"789 Main St, Vancouver, BC V6A 2H7",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"1234 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000012,https://example.com/1000012/,"1010 Beach Ave, Vancouver, BC V6E 1T7",67890,123456,Y,1,15,6,John Doe,john.doe@my.email,234-567-8901,,"1010 Beach Ave, Vancouver, BC V6E 1T7",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"5678 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000013,https://example.com/1000013/,"201 Burrard St, Vancouver, BC V6C 3L6",67890,123456,Y,2,20,10,John Doe,john.doe@my.email,234-567-8901,,"201 Burrard St, Vancouver, BC V6C 3L6",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"9101 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000014,https://example.com/1000014/,"305 W Pender St, Vancouver, BC V6B 1T3",67890,123456,Y,1,10,5,John Doe,john.doe@my.email,234-567-8901,,"305 W Pender St, Vancouver, BC V6B 1T3",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"8765 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000015,https://example.com/1000015/,"5000 Kingsway, Burnaby, BC V5H 2E4",67890,123456,Y,2,22,9,John Doe,john.doe@my.email,234-567-8901,,"5000 Kingsway, Burnaby, BC V5H 2E4",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"5432 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000016,https://example.com/1000016/,"700 Hamilton St, Vancouver, BC V6B 2R5",67890,123456,Y,3,28,11,John Doe,john.doe@my.email,234-567-8901,,"700 Hamilton St, Vancouver, BC V6B 2R5",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"6789 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000017,https://example.com/1000017/,"800 Robson St, Vancouver, BC V6Z 2E7",67890,123456,Y,1,12,4,John Doe,john.doe@my.email,234-567-8901,,"800 Robson St, Vancouver, BC V6Z 2E7",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"2341 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000018,https://example.com/1000018/,"1200 W Georgia St, Vancouver, BC V6E 4R2",67890,123456,Y,2,18,7,John Doe,john.doe@my.email,234-567-8901,,"1200 W Georgia St, Vancouver, BC V6E 4R2",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"3452 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000019,https://example.com/1000019/,"123 Main St, Richmond, BC V6X 1A1",67890,123456,Y,3,25,10,John Doe,john.doe@my.email,234-567-8901,,"123 Main St, Richmond, BC V6X 1A1",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"5673 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000020,https://example.com/1000020/,"7890 Cambie St, Vancouver, BC V6P 3H5",67890,123456,Y,1,8,3,John Doe,john.doe@my.email,234-567-8901,,"7890 Cambie St, Vancouver, BC V6P 3H5",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"4321 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000021,https://example.com/1000021/,"2500 Commercial Dr, Vancouver, BC V5N 4B3",67890,123456,Y,2,20,8,John Doe,john.doe@my.email,234-567-8901,,"2500 Commercial Dr, Vancouver, BC V5N 4B3",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"9876 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000022,https://example.com/1000022/,"5555 Joyce St, Vancouver, BC V5R 4H1",67890,123456,Y,3,27,11,John Doe,john.doe@my.email,234-567-8901,,"5555 Joyce St, Vancouver, BC V5R 4H1",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"6543 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000023,https://example.com/1000023/,"2300 Kingsway, Vancouver, BC V5N 2T5",67890,123456,Y,2,18,7,John Doe,john.doe@my.email,234-567-8901,,"2300 Kingsway, Vancouver, BC V5N 2T5",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"5439 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000024,https://example.com/1000024/,"6000 Main St, Vancouver, BC V5W 2T7",67890,123456,Y,1,14,5,John Doe,john.doe@my.email,234-567-8901,,"6000 Main St, Vancouver, BC V5W 2T7",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"6578 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000025,https://example.com/1000025/,"8888 Fraser St, Vancouver, BC V5X 3X6",67890,123456,Y,3,32,13,John Doe,john.doe@my.email,234-567-8901,,"8888 Fraser St, Vancouver, BC V5X 3X6",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"7891 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000026,https://example.com/1000026/,"555 Burrard St, Vancouver, BC V7X 1M8",67890,123456,Y,2,24,10,John Doe,john.doe@my.email,234-567-8901,,"555 Burrard St, Vancouver, BC V7X 1M8",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"3210 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000027,https://example.com/1000027/,"700 Seymour St, Vancouver, BC V6B 3K4",67890,123456,Y,1,16,6,John Doe,john.doe@my.email,234-567-8901,,"700 Seymour St, Vancouver, BC V6B 3K4",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"1239 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000028,https://example.com/1000028/,"900 Granville St, Vancouver, BC V6Z 1L2",67890,123456,Y,3,29,12,John Doe,john.doe@my.email,234-567-8901,,"900 Granville St, Vancouver, BC V6Z 1L2",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"3458 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000029,https://example.com/1000029/,"1100 Robson St, Vancouver, BC V6E 1B5",67890,123456,Y,2,20,8,John Doe,john.doe@my.email,234-567-8901,,"1100 Robson St, Vancouver, BC V6E 1B5",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"7896 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000030,https://example.com/1000030/,"1200 Richards St, Vancouver, BC V6B 3G2",67890,123456,Y,1,11,4,John Doe,john.doe@my.email,234-567-8901,,"1200 Richards St, Vancouver, BC V6B 3G2",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"4329 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000031,https://example.com/1000031/,"1300 Homer St, Vancouver, BC V6B 5M9",67890,123456,Y,2,22,9,John Doe,john.doe@my.email,234-567-8901,,"1300 Homer St, Vancouver, BC V6B 5M9",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"6543 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000032,https://example.com/1000032/,"1400 Richards St, Vancouver, BC V6B 3G6",67890,123456,Y,3,28,11,John Doe,john.doe@my.email,234-567-8901,,"1400 Richards St, Vancouver, BC V6B 3G6",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"3458 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000033,https://example.com/1000033/,"1500 Nelson St, Vancouver, BC V6G 1M5",67890,123456,Y,1,12,5,John Doe,john.doe@my.email,234-567-8901,,"1500 Nelson St, Vancouver, BC V6G 1M5",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"9876 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000034,https://example.com/1000034/,"1600 Robson St, Vancouver, BC V6G 1C7",67890,123456,Y,2,20,8,John Doe,john.doe@my.email,234-567-8901,,"1600 Robson St, Vancouver, BC V6G 1C7",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"5432 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000035,https://example.com/1000035/,"1700 Denman St, Vancouver, BC V6G 2L3",67890,123456,Y,3,30,12,John Doe,john.doe@my.email,234-567-8901,,"1700 Denman St, Vancouver, BC V6G 2L3",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"7891 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000036,https://example.com/1000036/,"1800 Bute St, Vancouver, BC V6E 2Z2",67890,123456,Y,1,10,4,John Doe,john.doe@my.email,234-567-8901,,"1800 Bute St, Vancouver, BC V6E 2Z2",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"3210 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000037,https://example.com/1000037/,"1900 Burrard St, Vancouver, BC V6J 3G3",67890,123456,Y,2,22,9,John Doe,john.doe@my.email,234-567-8901,,"1900 Burrard St, Vancouver, BC V6J 3G3",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"5678 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000038,https://example.com/1000038/,"2000 Granville St, Vancouver, BC V6H 3H7",67890,123456,Y,3,28,11,John Doe,john.doe@my.email,234-567-8901,,"2000 Granville St, Vancouver, BC V6H 3H7",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"6789 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000039,https://example.com/1000039/,"2100 Cambie St, Vancouver, BC V5Z 4N6",67890,123456,Y,1,12,5,John Doe,john.doe@my.email,234-567-8901,,"2100 Cambie St, Vancouver, BC V5Z 4N6",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"5439 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000040,https://example.com/1000040/,"2200 Main St, Vancouver, BC V5T 3G1",67890,123456,Y,2,18,7,John Doe,john.doe@my.email,234-567-8901,,"2200 Main St, Vancouver, BC V5T 3G1",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"8765 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000041,https://example.com/1000041/,"2300 Commercial Dr, Vancouver, BC V5N 4B3",67890,123456,Y,3,27,11,John Doe,john.doe@my.email,234-567-8901,,"2300 Commercial Dr, Vancouver, BC V5N 4B3",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"7896 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000042,https://example.com/1000042/,"2400 Broadway, Vancouver, BC V5N 5M2",67890,123456,Y,1,14,5,John Doe,john.doe@my.email,234-567-8901,,"2400 Broadway, Vancouver, BC V5N 5M2",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"9871 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000043,https://example.com/1000043/,"2500 Hastings St, Vancouver, BC V5K 1Z5",67890,123456,Y,2,20,8,John Doe,john.doe@my.email,234-567-8901,,"2500 Hastings St, Vancouver, BC V5K 1Z5",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"6543 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000044,https://example.com/1000044/,"2600 Victoria Dr, Vancouver, BC V5N 4M9",67890,123456,Y,3,30,12,John Doe,john.doe@my.email,234-567-8901,,"2600 Victoria Dr, Vancouver, BC V5N 4M9",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"3452 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000045,https://example.com/1000045/,"2700 Commercial Dr, Vancouver, BC V5N 4A1",67890,123456,Y,1,10,4,John Doe,john.doe@my.email,234-567-8901,,"2700 Commercial Dr, Vancouver, BC V5N 4A1",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"6782 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000046,https://example.com/1000046/,"2800 Main St, Vancouver, BC V5T 3G1",67890,123456,Y,2,18,7,John Doe,john.doe@my.email,234-567-8901,,"2800 Main St, Vancouver, BC V5T 3G1",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"8762 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000047,https://example.com/1000047/,"2900 Broadway, Vancouver, BC V5N 5M2",67890,123456,Y,3,27,11,John Doe,john.doe@my.email,234-567-8901,,"2900 Broadway, Vancouver, BC V5N 5M2",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"5432 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000048,https://example.com/1000048/,"3000 Kingsway, Vancouver, BC V5R 5W2",67890,123456,Y,1,12,5,John Doe,john.doe@my.email,234-567-8901,,"3000 Kingsway, Vancouver, BC V5R 5W2",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"7892 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000049,https://example.com/1000049/,"3100 Victoria Dr, Vancouver, BC V5N 4L9",67890,123456,Y,2,20,8,John Doe,john.doe@my.email,234-567-8901,,"3100 Victoria Dr, Vancouver, BC V5N 4L9",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"6789 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000050,https://example.com/1000050/,"3200 Main St, Vancouver, BC V5T 3E6",67890,123456,Y,3,28,11,John Doe,john.doe@my.email,234-567-8901,,"3200 Main St, Vancouver, BC V5T 3E6",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"5439 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000051,https://example.com/1000051/,"3300 Commercial Dr, Vancouver, BC V5N 4A1",67890,123456,Y,1,14,5,John Doe,john.doe@my.email,234-567-8901,,"3300 Commercial Dr, Vancouver, BC V5N 4A1",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"8765 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000052,https://example.com/1000052/,"3400 Broadway, Vancouver, BC V5N 5N2",67890,123456,Y,2,18,7,John Doe,john.doe@my.email,234-567-8901,,"3400 Broadway, Vancouver, BC V5N 5N2",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"7896 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000053,https://example.com/1000053/,"3500 Kingsway, Vancouver, BC V5R 5X2",67890,123456,Y,3,30,12,John Doe,john.doe@my.email,234-567-8901,,"3500 Kingsway, Vancouver, BC V5R 5X2",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"9871 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000054,https://example.com/1000054/,"3600 Victoria Dr, Vancouver, BC V5N 4L9",67890,123456,Y,1,10,4,John Doe,john.doe@my.email,234-567-8901,,"3600 Victoria Dr, Vancouver, BC V5N 4L9",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"6543 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000055,https://example.com/1000055/,"3700 Main St, Vancouver, BC V5T 3G1",67890,123456,Y,2,22,9,John Doe,john.doe@my.email,234-567-8901,,"3700 Main St, Vancouver, BC V5T 3G1",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"3452 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000056,https://example.com/1000056/,"3800 Commercial Dr, Vancouver, BC V5N 4A1",67890,123456,Y,3,28,11,John Doe,john.doe@my.email,234-567-8901,,"3800 Commercial Dr, Vancouver, BC V5N 4A1",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"6782 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000057,https://example.com/1000057/,"3900 Broadway, Vancouver, BC V5N 5M2",67890,123456,Y,1,12,5,John Doe,john.doe@my.email,234-567-8901,,"3900 Broadway, Vancouver, BC V5N 5M2",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"8762 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000058,https://example.com/1000058/,"4000 Kingsway, Vancouver, BC V5R 5W2",67890,123456,Y,2,20,8,John Doe,john.doe@my.email,234-567-8901,,"4000 Kingsway, Vancouver, BC V5R 5W2",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"5432 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000059,https://example.com/1000059/,"4100 Victoria Dr, Vancouver, BC V5N 4M9",67890,123456,Y,3,27,11,John Doe,john.doe@my.email,234-567-8901,,"4100 Victoria Dr, Vancouver, BC V5N 4M9",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"7892 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000060,https://example.com/1000060/,"4200 Main St, Vancouver, BC V5T 3G1",67890,123456,Y,1,14,5,John Doe,john.doe@my.email,234-567-8901,,"4200 Main St, Vancouver, BC V5T 3G1",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"6543 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000061,https://example.com/1000061/,"4300 Commercial Dr, Vancouver, BC V5N 4A1",67890,123456,Y,2,18,7,John Doe,john.doe@my.email,234-567-8901,,"4300 Commercial Dr, Vancouver, BC V5N 4A1",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"8765 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000062,https://example.com/1000062/,"4400 Broadway, Vancouver, BC V5N 5N2",67890,123456,Y,3,30,12,John Doe,john.doe@my.email,234-567-8901,,"4400 Broadway, Vancouver, BC V5N 5N2",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"5432 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000063,https://example.com/1000063/,"4500 Kingsway, Vancouver, BC V5R 5X2",67890,123456,Y,1,10,4,John Doe,john.doe@my.email,234-567-8901,,"4500 Kingsway, Vancouver, BC V5R 5X2",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"7892 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000064,https://example.com/1000064/,"4600 Victoria Dr, Vancouver, BC V5N 4L9",67890,123456,Y,2,22,9,John Doe,john.doe@my.email,234-567-8901,,"4600 Victoria Dr, Vancouver, BC V5N 4L9",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"5432 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000065,https://example.com/1000065/,"4700 Main St, Vancouver, BC V5T 3G1",67890,123456,Y,3,28,11,John Doe,john.doe@my.email,234-567-8901,,"4700 Main St, Vancouver, BC V5T 3G1",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"8765 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000066,https://example.com/1000066/,"4800 Commercial Dr, Vancouver, BC V5N 4A1",67890,123456,Y,1,12,5,John Doe,john.doe@my.email,234-567-8901,,"4800 Commercial Dr, Vancouver, BC V5N 4A1",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"7892 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000067,https://example.com/1000067/,"4900 Broadway, Vancouver, BC V5N 5M2",67890,123456,Y,2,18,7,John Doe,john.doe@my.email,234-567-8901,,"4900 Broadway, Vancouver, BC V5N 5M2",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"5432 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000068,https://example.com/1000068/,"5000 Kingsway, Vancouver, BC V5R 5W2",67890,123456,Y,3,27,11,John Doe,john.doe@my.email,234-567-8901,,"5000 Kingsway, Vancouver, BC V5R 5W2",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"8762 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000069,https://example.com/1000069/,"5100 Victoria Dr, Vancouver, BC V5N 4L9",67890,123456,Y,1,10,4,John Doe,john.doe@my.email,234-567-8901,,"5100 Victoria Dr, Vancouver, BC V5N 4L9",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"7891 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000070,https://example.com/1000070/,"5200 Main St, Vancouver, BC V5T 3G1",67890,123456,Y,2,22,9,John Doe,john.doe@my.email,234-567-8901,,"5200 Main St, Vancouver, BC V5T 3G1",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"5432 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000071,https://example.com/1000071/,"5300 Commercial Dr, Vancouver, BC V5N 4A1",67890,123456,Y,3,28,11,John Doe,john.doe@my.email,234-567-8901,,"5300 Commercial Dr, Vancouver, BC V5N 4A1",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"8765 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000072,https://example.com/1000072/,"5400 Broadway, Vancouver, BC V5N 5N2",67890,123456,Y,1,12,5,John Doe,john.doe@my.email,234-567-8901,,"5400 Broadway, Vancouver, BC V5N 5N2",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"7892 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000073,https://example.com/1000073/,"5500 Kingsway, Vancouver, BC V5R 5X2",67890,123456,Y,2,20,8,John Doe,john.doe@my.email,234-567-8901,,"5500 Kingsway, Vancouver, BC V5R 5X2",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"5432 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000074,https://example.com/1000074/,"5600 Victoria Dr, Vancouver, BC V5N 4L9",67890,123456,Y,3,27,11,John Doe,john.doe@my.email,234-567-8901,,"5600 Victoria Dr, Vancouver, BC V5N 4L9",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"7892 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000075,https://example.com/1000075/,"5700 Main St, Vancouver, BC V5T 3G1",67890,123456,Y,1,10,4,John Doe,john.doe@my.email,234-567-8901,,"5700 Main St, Vancouver, BC V5T 3G1",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"7892 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000076,https://example.com/1000076/,"5800 Commercial Dr, Vancouver, BC V5N 4A1",67890,123456,Y,2,22,9,John Doe,john.doe@my.email,234-567-8901,,"5800 Commercial Dr, Vancouver, BC V5N 4A1",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"7892 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000077,https://example.com/1000077/,"5900 Broadway, Vancouver, BC V5N 5M2",67890,123456,Y,3,30,12,John Doe,john.doe@my.email,234-567-8901,,"5900 Broadway, Vancouver, BC V5N 5M2",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"5432 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000078,https://example.com/1000078/,"6000 Kingsway, Vancouver, BC V5R 5W2",67890,123456,Y,1,14,5,John Doe,john.doe@my.email,234-567-8901,,"6000 Kingsway, Vancouver, BC V5R 5W2",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"7892 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000079,https://example.com/1000079/,"6100 Victoria Dr, Vancouver, BC V5N 4L9",67890,123456,Y,2,18,7,John Doe,john.doe@my.email,234-567-8901,,"6100 Victoria Dr, Vancouver, BC V5N 4L9",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"5432 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000080,https://example.com/1000080/,"6200 Main St, Vancouver, BC V5T 3G1",67890,123456,Y,3,28,11,John Doe,john.doe@my.email,234-567-8901,,"6200 Main St, Vancouver, BC V5T 3G1",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"7892 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000081,https://example.com/1000081/,"6300 Commercial Dr, Vancouver, BC V5N 4A1",67890,123456,Y,1,12,5,John Doe,john.doe@my.email,234-567-8901,,"6300 Commercial Dr, Vancouver, BC V5N 4A1",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"7892 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000082,https://example.com/1000082/,"6400 Broadway, Vancouver, BC V5N 5N2",67890,123456,Y,2,20,8,John Doe,john.doe@my.email,234-567-8901,,"6400 Broadway, Vancouver, BC V5N 5N2",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"5432 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000083,https://example.com/1000083/,"6500 Kingsway, Vancouver, BC V5R 5X2",67890,123456,Y,3,27,11,John Doe,john.doe@my.email,234-567-8901,,"6500 Kingsway, Vancouver, BC V5R 5X2",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"7892 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000084,https://example.com/1000084/,"6600 Victoria Dr, Vancouver, BC V5N 4L9",67890,123456,Y,1,10,4,John Doe,john.doe@my.email,234-567-8901,,"6600 Victoria Dr, Vancouver, BC V5N 4L9",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"5432 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000085,https://example.com/1000085/,"6700 Main St, Vancouver, BC V5T 3G1",67890,123456,Y,2,18,7,John Doe,john.doe@my.email,234-567-8901,,"6700 Main St, Vancouver, BC V5T 3G1",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"7892 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000086,https://example.com/1000086/,"6800 Commercial Dr, Vancouver, BC V5N 4A1",67890,123456,Y,3,28,11,John Doe,john.doe@my.email,234-567-8901,,"6800 Commercial Dr, Vancouver, BC V5N 4A1",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"5432 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000087,https://example.com/1000087/,"6900 Broadway, Vancouver, BC V5N 5M2",67890,123456,Y,1,12,5,John Doe,john.doe@my.email,234-567-8901,,"6900 Broadway, Vancouver, BC V5N 5M2",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"7892 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000088,https://example.com/1000088/,"7000 Kingsway, Vancouver, BC V5R 5W2",67890,123456,Y,2,22,9,John Doe,john.doe@my.email,234-567-8901,,"7000 Kingsway, Vancouver, BC V5R 5W2",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"5432 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000089,https://example.com/1000089/,"7100 Victoria Dr, Vancouver, BC V5N 4L9",67890,123456,Y,3,30,12,John Doe,john.doe@my.email,234-567-8901,,"7100 Victoria Dr, Vancouver, BC V5N 4L9",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"7892 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000091,https://example.com/1000091/,"1000 Fort St, Victoria, BC V8V 3K4",67890,123456,Y,2,22,9,John Doe,john.doe@my.email,234-567-8901,,"1000 Fort St, Victoria, BC V8V 3K4",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"8765 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000092,https://example.com/1000092/,"1100 Blanshard St, Victoria, BC V8W 2H5",67890,123456,Y,1,10,4,John Doe,john.doe@my.email,234-567-8901,,"1100 Blanshard St, Victoria, BC V8W 2H5",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"5432 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000093,https://example.com/1000093/,"1200 Government St, Victoria, BC V8W 1Y2",67890,123456,Y,3,27,11,John Doe,john.doe@my.email,234-567-8901,,"1200 Government St, Victoria, BC V8W 1Y2",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"8765 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000094,https://example.com/1000094/,"1300 Douglas St, Victoria, BC V8W 2E7",67890,123456,Y,2,18,7,John Doe,john.doe@my.email,234-567-8901,,"1300 Douglas St, Victoria, BC V8W 2E7",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"5432 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000095,https://example.com/1000095/,"1400 Yates St, Victoria, BC V8V 3K8",67890,123456,Y,3,30,12,John Doe,john.doe@my.email,234-567-8901,,"1400 Yates St, Victoria, BC V8V 3K8",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"8765 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000096,https://example.com/1000096/,"1500 Vancouver St, Victoria, BC V8V 4C7",67890,123456,Y,1,12,5,John Doe,john.doe@my.email,234-567-8901,,"1500 Vancouver St, Victoria, BC V8V 4C7",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"5432 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000097,https://example.com/1000097/,"1600 Hillside Ave, Victoria, BC V8T 2C3",67890,123456,Y,2,20,8,John Doe,john.doe@my.email,234-567-8901,,"1600 Hillside Ave, Victoria, BC V8T 2C3",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"8765 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000098,https://example.com/1000098/,"1700 Oak Bay Ave, Victoria, BC V8R 1B3",67890,123456,Y,3,28,11,John Doe,john.doe@my.email,234-567-8901,,"1700 Oak Bay Ave, Victoria, BC V8R 1B3",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"5432 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000099,https://example.com/1000099/,"1800 Fairfield Rd, Victoria, BC V8S 1G4",67890,123456,Y,1,10,4,John Doe,john.doe@my.email,234-567-8901,,"1800 Fairfield Rd, Victoria, BC V8S 1G4",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"8765 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000100,https://example.com/1000100/,"1900 Cook St, Victoria, BC V8T 3P4",67890,123456,Y,2,22,9,John Doe,john.doe@my.email,234-567-8901,,"1900 Cook St, Victoria, BC V8T 3P4",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"5432 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000101,https://example.com/1000101/,"2000 Johnson St, Victoria, BC V8T 3H2",67890,123456,Y,3,27,11,John Doe,john.doe@my.email,234-567-8901,,"2000 Johnson St, Victoria, BC V8T 3H2",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"8765 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000102,https://example.com/1000102/,"2100 Bay St, Victoria, BC V8T 1Y3",67890,123456,Y,1,12,5,John Doe,john.doe@my.email,234-567-8901,,"2100 Bay St, Victoria, BC V8T 1Y3",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"5432 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000103,https://example.com/1000103/,"2200 Foul Bay Rd, Victoria, BC V8R 2C8",67890,123456,Y,2,20,8,John Doe,john.doe@my.email,234-567-8901,,"2200 Foul Bay Rd, Victoria, BC V8R 2C8",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"8765 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000104,https://example.com/1000104/,"2300 Shelbourne St, Victoria, BC V8R 4N9",67890,123456,Y,3,28,11,John Doe,john.doe@my.email,234-567-8901,,"2300 Shelbourne St, Victoria, BC V8R 4N9",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"5432 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000105,https://example.com/1000105/,"2400 Richmond Rd, Victoria, BC V8R 4V6",67890,123456,Y,1,10,4,John Doe,john.doe@my.email,234-567-8901,,"2400 Richmond Rd, Victoria, BC V8R 4V6",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"8765 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000106,https://example.com/1000106/,"2500 Cedar Hill Rd, Victoria, BC V8P 3Z4",67890,123456,Y,2,22,9,John Doe,john.doe@my.email,234-567-8901,,"2500 Cedar Hill Rd, Victoria, BC V8P 3Z4",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"5432 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000107,https://example.com/1000107/,"2600 Hillside Ave, Victoria, BC V8T 1Z4",67890,123456,Y,3,27,11,John Doe,john.doe@my.email,234-567-8901,,"2600 Hillside Ave, Victoria, BC V8T 1Z4",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"8765 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000108,https://example.com/1000108/,"2700 Cook St, Victoria, BC V8T 3R7",67890,123456,Y,1,12,5,John Doe,john.doe@my.email,234-567-8901,,"2700 Cook St, Victoria, BC V8T 3R7",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"5432 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000109,https://example.com/1000109/,"2800 Quadra St, Victoria, BC V8T 4E2",67890,123456,Y,2,20,8,John Doe,john.doe@my.email,234-567-8901,,"2800 Quadra St, Victoria, BC V8T 4E2",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"8765 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000110,https://example.com/1000110/,"2900 Burnside Rd, Victoria, BC V8T 5B4",67890,123456,Y,3,28,11,John Doe,john.doe@my.email,234-567-8901,,"2900 Burnside Rd, Victoria, BC V8T 5B4",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"5432 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000111,https://example.com/1000111/,"3000 Gorge Rd, Victoria, BC V9A 1M9",67890,123456,Y,1,10,4,John Doe,john.doe@my.email,234-567-8901,,"3000 Gorge Rd, Victoria, BC V9A 1M9",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"8765 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000112,https://example.com/1000112/,"3100 Tillicum Rd, Victoria, BC V9A 2A5",67890,123456,Y,2,22,9,John Doe,john.doe@my.email,234-567-8901,,"3100 Tillicum Rd, Victoria, BC V9A 2A5",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"5432 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000113,https://example.com/1000113/,"3200 Admirals Rd, Victoria, BC V9A 2P6",67890,123456,Y,3,27,11,John Doe,john.doe@my.email,234-567-8901,,"3200 Admirals Rd, Victoria, BC V9A 2P6",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"8765 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000114,https://example.com/1000114/,"3300 Harriet Rd, Victoria, BC V8Z 3S8",67890,123456,Y,1,12,5,John Doe,john.doe@my.email,234-567-8901,,"3300 Harriet Rd, Victoria, BC V8Z 3S8",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"5432 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000115,https://example.com/1000115/,"3400 Burnside Rd, Victoria, BC V8Z 3X2",67890,123456,Y,2,20,8,John Doe,john.doe@my.email,234-567-8901,,"3400 Burnside Rd, Victoria, BC V8Z 3X2",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"8765 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000116,https://example.com/1000116/,"3500 McKenzie Ave, Victoria, BC V8P 2M7",67890,123456,Y,3,28,11,John Doe,john.doe@my.email,234-567-8901,,"3500 McKenzie Ave, Victoria, BC V8P 2M7",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"5432 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000117,https://example.com/1000117/,"3600 Shelbourne St, Victoria, BC V8P 4H2",67890,123456,Y,1,10,4,John Doe,john.doe@my.email,234-567-8901,,"3600 Shelbourne St, Victoria, BC V8P 4H2",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"8765 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000118,https://example.com/1000118/,"3700 McRae Ave, Victoria, BC V8P 2G7",67890,123456,Y,2,22,9,John Doe,john.doe@my.email,234-567-8901,,"3700 McRae Ave, Victoria, BC V8P 2G7",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"5432 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000119,https://example.com/1000119/,"3800 Cedar Hill Rd, Victoria, BC V8P 3Z4",67890,123456,Y,3,27,11,John Doe,john.doe@my.email,234-567-8901,,"3800 Cedar Hill Rd, Victoria, BC V8P 3Z4",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"8765 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000120,https://example.com/1000120/,"3900 Richmond Rd, Victoria, BC V8R 4V6",67890,123456,Y,1,12,5,John Doe,john.doe@my.email,234-567-8901,,"3900 Richmond Rd, Victoria, BC V8R 4V6",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"5432 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLATFORMTEST,1000121,https://example.com/1000121/,"4000 Cedar Hill Cross Rd, Victoria, BC V8P 2N4",67890,123456,Y,2,20,8,John Doe,john.doe@my.email,234-567-8901,,"4000 Cedar Hill Cross Rd, Victoria, BC V8P 2N4",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"8765 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, diff --git a/Test/UITest/TestFrameWork/Models/UploadListingsModel.cs b/Test/UITest/TestFrameWork/Models/UploadListingsModel.cs new file mode 100644 index 00000000..1e5ad414 --- /dev/null +++ b/Test/UITest/TestFrameWork/Models/UploadListingsModel.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace TestFrameWork.Models +{ + public class UploadListingsModel + { + + public static string ReportingMonthDropDownList { get => "#month > div > chevrondownicon > svg"; } + + public static string SelectFileButton { get => "fileSelect-btn"; } + } +} diff --git a/Test/UITest/TestFrameWork/PageObjects/UploadListingsPage.cs b/Test/UITest/TestFrameWork/PageObjects/UploadListingsPage.cs new file mode 100644 index 00000000..cb4e9ed7 --- /dev/null +++ b/Test/UITest/TestFrameWork/PageObjects/UploadListingsPage.cs @@ -0,0 +1,26 @@ +using TestFrameWork.Models; +using UITest.Models; +using UITest.SeleniumObjects; +using UITest.TestDriver; +using UITest.TestObjectFramework; + +namespace UITest.PageObjects +{ + public class UploadListingsPage + { + private DropDownList _ReportingMonthDropDown; + private Button _SelectFileButton; + private IDriver _Driver; + + public DropDownList ReportingMonthDropDown { get => _ReportingMonthDropDown; } + public Button SelectFileButton { get => _SelectFileButton; } + public IDriver Driver { get => _Driver; } + + public UploadListingsPage(IDriver Driver) + { + _Driver = Driver; + _ReportingMonthDropDown = new DropDownList(Driver, Enums.FINDBY.CSSSELECTOR, UploadListingsModel.ReportingMonthDropDownList); + _SelectFileButton = new Button(Driver, Enums.FINDBY.ID, UploadListingsModel.SelectFileButton); + } + } +} diff --git a/Test/UITest/WinFormsLibrary1/Controls/FileDialog.cs b/Test/UITest/WinFormsLibrary1/Controls/FileDialog.cs new file mode 100644 index 00000000..9a42d215 --- /dev/null +++ b/Test/UITest/WinFormsLibrary1/Controls/FileDialog.cs @@ -0,0 +1,41 @@ +using Interop.UIAutomationClient; +using Interop.UIAutomationCore; + +namespace TestFrameWork.WindowsAutomation.Controls +{ + public class FileDialog + { + + public void FindAndSet(string FileName, string WindowName, string AutomationID) + { + + //WindowName = open, class name = #32770 + var automation = new CUIAutomation(); + IUIAutomationElement desktop = automation.GetRootElement(); + IUIAutomationCondition NameCondition = automation.CreatePropertyCondition(UIA_PropertyIds.UIA_NamePropertyId, WindowName); + //IUIAutomationCondition condition = automation.CreatePropertyCondition(UIA_PropertyIds.uia, WindowName); + IUIAutomationCondition ClassCondition = automation.CreatePropertyCondition(UIA_PropertyIds.UIA_NamePropertyId, WindowName); + + IUIAutomationElement fileDialog = desktop.FindFirst(TreeScope.TreeScope_Children, NameCondition); + if (fileDialog != null) + { + //className = edit, automationID= 1148 + IUIAutomationCondition fileNameCondition = automation.CreatePropertyCondition(UIA_PropertyIds.UIA_AutomationIdPropertyId, AutomationID); + IUIAutomationElement fileNameBox = fileDialog.FindFirst(TreeScope.TreeScope_Descendants, fileNameCondition); + if (fileNameBox != null) + { + var valuePattern = (IUIAutomationValuePattern)fileNameBox.GetCurrentPattern(UIA_PatternIds.UIA_ValuePatternId); + valuePattern.SetValue(FileName); + } + + IUIAutomationCondition openButtonCondition = automation.CreatePropertyCondition(UIA_PropertyIds.UIA_NamePropertyId, WindowName); + IUIAutomationElement openButton = fileDialog.FindFirst(TreeScope.TreeScope_Descendants, openButtonCondition); + if (openButton != null) + { + var invokePattern = (IUIAutomationInvokePattern)openButton.GetCurrentPattern(UIA_PatternIds.UIA_InvokePatternId); + invokePattern.Invoke(); + } + } + } + } +} diff --git a/Test/UITest/WinFormsLibrary1/WindowsAutomation.csproj b/Test/UITest/WinFormsLibrary1/WindowsAutomation.csproj new file mode 100644 index 00000000..5505d6f6 --- /dev/null +++ b/Test/UITest/WinFormsLibrary1/WindowsAutomation.csproj @@ -0,0 +1,15 @@ + + + + net7.0 + enable + false + enable + + + + + + + + From 3632ce0d69302519dd0e5f9697e23d0b0a3dbe96 Mon Sep 17 00:00:00 2001 From: Rick Anderson Date: Mon, 17 Jun 2024 10:22:06 -0700 Subject: [PATCH 4/9] Working with Windows File Dialog --- .../UploadListingDataPlatformUser.feature | 8 ++--- .../UploadListingDataPlatformUser.feature.cs | 8 +++-- .../UploadListingDataPlatformUser.cs | 12 ++++--- .../Models/UploadListingsModel.cs | 1 + .../PageObjects/UploadListingsPage.cs | 3 ++ .../WinFormsLibrary1/Controls/FileDialog.cs | 34 ++++++++++++++----- 6 files changed, 46 insertions(+), 20 deletions(-) diff --git a/Test/UITest/SpecFlowProjectBDD/Features/UploadListingDataPlatformUser.feature b/Test/UITest/SpecFlowProjectBDD/Features/UploadListingDataPlatformUser.feature index bcafca39..10e4c0a0 100644 --- a/Test/UITest/SpecFlowProjectBDD/Features/UploadListingDataPlatformUser.feature +++ b/Test/UITest/SpecFlowProjectBDD/Features/UploadListingDataPlatformUser.feature @@ -23,7 +23,7 @@ Scenario: UploadListingDataPlatformUser Given I am on the upload data interface - When I select a CSV file containing short-term listing data + When I select a CSV file containing short-term listing data "" #Month Designation: @@ -73,9 +73,9 @@ Scenario: UploadListingDataPlatformUser Examples: - | UserName | UserType | Environment | ExpectedResult | - | STRDSSVrboDev | platform_staff | dev | pass | - #| STRDSSAirbnbDev | platform_staff | dev | pass | + | UserName | UserType | Environment | UploadFile | ExpectedResult | + | STRDSSVrboDev | platform_staff | dev | C:\Users\RAnderson\Source\Repos\House-Policy-STRDSS\Test\UITest\TestData\listing files\listing-valid-2024-04.csv| pass | + #| STRDSSAirbnbDev | platform_staff | dev | |pass | diff --git a/Test/UITest/SpecFlowProjectBDD/Features/UploadListingDataPlatformUser.feature.cs b/Test/UITest/SpecFlowProjectBDD/Features/UploadListingDataPlatformUser.feature.cs index 4ee5a1ac..480f5871 100644 --- a/Test/UITest/SpecFlowProjectBDD/Features/UploadListingDataPlatformUser.feature.cs +++ b/Test/UITest/SpecFlowProjectBDD/Features/UploadListingDataPlatformUser.feature.cs @@ -76,8 +76,9 @@ public void ScenarioCleanup() [NUnit.Framework.TestAttribute()] [NUnit.Framework.DescriptionAttribute("UploadListingDataPlatformUser")] [NUnit.Framework.CategoryAttribute("UploadListingData")] - [NUnit.Framework.TestCaseAttribute("STRDSSVrboDev", "platform_staff", "dev", "pass", null)] - public void UploadListingDataPlatformUser(string userName, string userType, string environment, string expectedResult, string[] exampleTags) + [NUnit.Framework.TestCaseAttribute("STRDSSVrboDev", "platform_staff", "dev", "C:\\Users\\RAnderson\\Source\\Repos\\House-Policy-STRDSS\\Test\\UITest\\TestData\\listing " + + "files\\listing-valid-2024-04.csv", "pass", null)] + public void UploadListingDataPlatformUser(string userName, string userType, string environment, string uploadFile, string expectedResult, string[] exampleTags) { string[] @__tags = new string[] { "UploadListingData"}; @@ -90,6 +91,7 @@ public void UploadListingDataPlatformUser(string userName, string userType, stri argumentsOfScenario.Add("UserName", userName); argumentsOfScenario.Add("UserType", userType); argumentsOfScenario.Add("Environment", environment); + argumentsOfScenario.Add("UploadFile", uploadFile); argumentsOfScenario.Add("ExpectedResult", expectedResult); TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("UploadListingDataPlatformUser", null, tagsOfScenario, argumentsOfScenario, featureTags); #line 5 @@ -122,7 +124,7 @@ public void UploadListingDataPlatformUser(string userName, string userType, stri testRunner.Given("I am on the upload data interface", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Given "); #line hidden #line 26 - testRunner.When("I select a CSV file containing short-term listing data", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "When "); + testRunner.When(string.Format("I select a CSV file containing short-term listing data \"{0}\"", uploadFile), ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "When "); #line hidden #line 30 testRunner.And("I select which month the STR listing data is for", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); diff --git a/Test/UITest/SpecFlowProjectBDD/StepDefinitions/UploadListingDataPlatformUser.cs b/Test/UITest/SpecFlowProjectBDD/StepDefinitions/UploadListingDataPlatformUser.cs index 4cc235d0..474e77ad 100644 --- a/Test/UITest/SpecFlowProjectBDD/StepDefinitions/UploadListingDataPlatformUser.cs +++ b/Test/UITest/SpecFlowProjectBDD/StepDefinitions/UploadListingDataPlatformUser.cs @@ -114,12 +114,12 @@ public void GivenIAmOnTheUploadDataInterface() //throw new PendingStepException(); } - [When(@"I select a CSV file containing short-term listing data")] - public void WhenISelectACSVFileContainingShort_TermListingData() + [When(@"I select a CSV file containing short-term listing data ""([^""]*)""")] + public void WhenISelectACSVFileContainingShort_TermListingData(string UploadFile) { _UploadListingsPage.SelectFileButton.Click(); FileDialog fileDialog = new FileDialog(); - fileDialog.FindAndSet("C:\\Users\\RAnderson\\Source\\Repos\\House-Policy-STRDSS\\Test\\UITest\\TestData\\listing files\\listing-valid-2024-04.csv", "Open", "007C2B0C"); + fileDialog.FindAndSet(UploadFile, "Short-Term Rental Data Portal - Google Chrome", "Chrome_WidgetWin_1"); } @@ -127,12 +127,14 @@ public void WhenISelectACSVFileContainingShort_TermListingData() public void WhenISelectWhichMonthTheSTRListingDataIsFor() { _UploadListingsPage.ReportingMonthDropDown.Click(); + _UploadListingsPage.ReportingMonthDropDown.ExecuteJavaScript(@"document.querySelector(""#month_0"").click()"); + } [When(@"I initiate the upload")] - public void WhenIInitiateTheUpload() + public void WhenInitiateTheUpload() { - //throw new PendingStepException(); + _UploadListingsPage.UploadButton.Click(); } [Then(@"the Data Sharing System should import the STR listing data")] diff --git a/Test/UITest/TestFrameWork/Models/UploadListingsModel.cs b/Test/UITest/TestFrameWork/Models/UploadListingsModel.cs index 1e5ad414..18a37c67 100644 --- a/Test/UITest/TestFrameWork/Models/UploadListingsModel.cs +++ b/Test/UITest/TestFrameWork/Models/UploadListingsModel.cs @@ -12,5 +12,6 @@ public class UploadListingsModel public static string ReportingMonthDropDownList { get => "#month > div > chevrondownicon > svg"; } public static string SelectFileButton { get => "fileSelect-btn"; } + public static string UploadButton { get => "upload-btn"; } } } diff --git a/Test/UITest/TestFrameWork/PageObjects/UploadListingsPage.cs b/Test/UITest/TestFrameWork/PageObjects/UploadListingsPage.cs index cb4e9ed7..cafe65bb 100644 --- a/Test/UITest/TestFrameWork/PageObjects/UploadListingsPage.cs +++ b/Test/UITest/TestFrameWork/PageObjects/UploadListingsPage.cs @@ -10,10 +10,12 @@ public class UploadListingsPage { private DropDownList _ReportingMonthDropDown; private Button _SelectFileButton; + private Button _UploadButton; private IDriver _Driver; public DropDownList ReportingMonthDropDown { get => _ReportingMonthDropDown; } public Button SelectFileButton { get => _SelectFileButton; } + public Button UploadButton { get => _UploadButton; } public IDriver Driver { get => _Driver; } public UploadListingsPage(IDriver Driver) @@ -21,6 +23,7 @@ public UploadListingsPage(IDriver Driver) _Driver = Driver; _ReportingMonthDropDown = new DropDownList(Driver, Enums.FINDBY.CSSSELECTOR, UploadListingsModel.ReportingMonthDropDownList); _SelectFileButton = new Button(Driver, Enums.FINDBY.ID, UploadListingsModel.SelectFileButton); + _UploadButton = new Button(Driver, Enums.FINDBY.ID, UploadListingsModel.UploadButton); } } } diff --git a/Test/UITest/WinFormsLibrary1/Controls/FileDialog.cs b/Test/UITest/WinFormsLibrary1/Controls/FileDialog.cs index 9a42d215..bb1c2c40 100644 --- a/Test/UITest/WinFormsLibrary1/Controls/FileDialog.cs +++ b/Test/UITest/WinFormsLibrary1/Controls/FileDialog.cs @@ -6,21 +6,34 @@ namespace TestFrameWork.WindowsAutomation.Controls public class FileDialog { - public void FindAndSet(string FileName, string WindowName, string AutomationID) + public void FindAndSet(string FileName, string WindowName, string ClassName) { //WindowName = open, class name = #32770 var automation = new CUIAutomation(); IUIAutomationElement desktop = automation.GetRootElement(); - IUIAutomationCondition NameCondition = automation.CreatePropertyCondition(UIA_PropertyIds.UIA_NamePropertyId, WindowName); - //IUIAutomationCondition condition = automation.CreatePropertyCondition(UIA_PropertyIds.uia, WindowName); - IUIAutomationCondition ClassCondition = automation.CreatePropertyCondition(UIA_PropertyIds.UIA_NamePropertyId, WindowName); - IUIAutomationElement fileDialog = desktop.FindFirst(TreeScope.TreeScope_Children, NameCondition); + //Find Chrome Window + IUIAutomationCondition nameCondition = automation.CreatePropertyCondition(UIA_PropertyIds.UIA_NamePropertyId, WindowName); + IUIAutomationCondition classCondition = automation.CreatePropertyCondition(UIA_PropertyIds.UIA_ClassNamePropertyId, ClassName); + + IUIAutomationCondition combinedCondition = automation.CreateAndCondition(nameCondition, classCondition); + Thread.Sleep(2000); + IUIAutomationElement chromeWindow = desktop.FindFirst(TreeScope.TreeScope_Descendants, combinedCondition); + + //Find FileDialogWindow + IUIAutomationCondition fileDialogNameCondition = automation.CreatePropertyCondition(UIA_PropertyIds.UIA_NamePropertyId, "Open"); + IUIAutomationCondition fileDialogClassCondition = automation.CreatePropertyCondition(UIA_PropertyIds.UIA_ClassNamePropertyId, "#32770"); + + IUIAutomationCondition fileDialogCombinedCondition = automation.CreateAndCondition(fileDialogNameCondition, fileDialogClassCondition); + Thread.Sleep(2000); + IUIAutomationElement fileDialog = chromeWindow.FindFirst(TreeScope.TreeScope_Descendants, fileDialogCombinedCondition); + if (fileDialog != null) { //className = edit, automationID= 1148 - IUIAutomationCondition fileNameCondition = automation.CreatePropertyCondition(UIA_PropertyIds.UIA_AutomationIdPropertyId, AutomationID); + IUIAutomationCondition fileNameCondition = automation.CreatePropertyCondition(UIA_PropertyIds.UIA_ClassNamePropertyId, "Edit"); + Thread.Sleep(2000); IUIAutomationElement fileNameBox = fileDialog.FindFirst(TreeScope.TreeScope_Descendants, fileNameCondition); if (fileNameBox != null) { @@ -28,10 +41,15 @@ public void FindAndSet(string FileName, string WindowName, string AutomationID) valuePattern.SetValue(FileName); } - IUIAutomationCondition openButtonCondition = automation.CreatePropertyCondition(UIA_PropertyIds.UIA_NamePropertyId, WindowName); - IUIAutomationElement openButton = fileDialog.FindFirst(TreeScope.TreeScope_Descendants, openButtonCondition); + IUIAutomationCondition openButtonNameCondition = automation.CreatePropertyCondition(UIA_PropertyIds.UIA_NamePropertyId, "Open"); + IUIAutomationCondition openButtonClassCondition = automation.CreatePropertyCondition(UIA_PropertyIds.UIA_ClassNamePropertyId, "Button"); + IUIAutomationCondition openButtonCombinedCondition = automation.CreateAndCondition(openButtonNameCondition, openButtonClassCondition); + Thread.Sleep(2000); + IUIAutomationElement openButton = fileDialog.FindFirst(TreeScope.TreeScope_Descendants, openButtonCombinedCondition); + if (openButton != null) { + Thread.Sleep(2000); var invokePattern = (IUIAutomationInvokePattern)openButton.GetCurrentPattern(UIA_PatternIds.UIA_InvokePatternId); invokePattern.Invoke(); } From ac5b95ee0a25407d5f1b540eb834cb5cc39b5ced Mon Sep 17 00:00:00 2001 From: Rick Anderson Date: Mon, 17 Jun 2024 12:05:29 -0700 Subject: [PATCH 5/9] Updated Org Name to remove upload errors --- .../listing files/listing-valid-2024-04.csv | 236 +++++++++--------- 1 file changed, 118 insertions(+), 118 deletions(-) diff --git a/Test/UITest/TestData/listing files/listing-valid-2024-04.csv b/Test/UITest/TestData/listing files/listing-valid-2024-04.csv index 61c3048e..28af139b 100644 --- a/Test/UITest/TestData/listing files/listing-valid-2024-04.csv +++ b/Test/UITest/TestData/listing files/listing-valid-2024-04.csv @@ -1,119 +1,119 @@ rpt_period,org_cd,listing_id,listing_url,rental_address,bus_lic_no,bc_reg_no,is_entire_unit,bedrooms_qty,nights_booked_qty,reservations_qty,property_host_nm,property_host_email,property_host_phone,property_host_fax,property_host_address,supplier_host_1_nm,supplier_host_1_email,supplier_host_1_phone,supplier_host_1_fax,supplier_host_1_address,supplier_host_1_id,supplier_host_2_nm,supplier_host_2_email,supplier_host_2_phone,supplier_host_2_fax,supplier_host_2_address,supplier_host_2_id,supplier_host_3_nm,supplier_host_3_email,supplier_host_3_phone,supplier_host_3_fax,supplier_host_3_address,supplier_host_3_id,supplier_host_4_nm,supplier_host_4_email,supplier_host_4_phone,supplier_host_4_fax,supplier_host_4_address,supplier_host_4_id,supplier_host_5_nm,supplier_host_5_email,supplier_host_5_phone,supplier_host_5_fax,supplier_host_5_address,supplier_host_5_id -2024-04,PLATFORMTEST,1000002,https://example.com/1000002/,"125 Atkins Rd, Victoria, BC V9B 6V4",54321,987654,Y,2,24,8,Teresa Homeowner,teresa.homeowner@my.email ,123-456-7890,,"125 Atkins Rd, Victoria, BC V9B 6V4",Bob Lister,bob.lister@my.email,987-654-3210,987-654-3211,"23668 36a Ave, Langley Twp, BC V4Z 2J6",654987321,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000004,https://example.com/1000004/,"23904 Fraser Hwy, Langley Twp, BC V2Z 2K8",54321,987654,Y,2,24,8,Teresa Homeowner,teresa.homeowner@my.email,123-456-7890,,"Unit 5 456 Example St. My City, BC V0V 0V0",Bob Lister,bob.lister@my.email,987-654-3210,987-654-3211,"8901 Another Way My City, BC V0V 0V0",654987321,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000005,https://example.com/2000005/,"Unit 5 456 Example St. My City, BC",54321,987654,Y,2,24,8,Teresa Homeowner,teresa.homeowner@my.email,123-456-7890,,"Unit 6 456 Example St. My City, BC V0V 0V0",Bob Lister,bob.lister@my.email,987-654-3210,987-654-3211,"9012 Another Way My City, BC V0V 0V0",654987321,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000006,https://example.com/1000006/,"Unit 6 456 Example St. My City, BC",54321,987654,Y,2,24,8,Teresa Homeowner,teresa.homeowner@my.email,123-456-7890,,"Unit 7 456 Example St. My City, BC V0V 0V0",Bob Lister,bob.lister@my.email,987-654-3210,987-654-3211,"0123 Another Way My City, BC V0V 0V0",654987321,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000007,https://example.com/1000007/,"Unit 7 456 Example St. y City, BC",54321,987654,Y,2,24,8,Teresa Homeowner,teresa.homeowner@my.email,123-456-7890,,"Unit 8 456 Example St. My City, BC V0V 0V0",Bob Lister,bob.lister@my.email,987-654-3210,987-654-3211,"1234 Another Way My City, BC V0V 0V0",654987321,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000008,https://example.com/1000008/,"Unit 8 456 Example St. My City, BC",54321,987654,Y,2,24,8,Teresa Homeowner,teresa.homeowner@my.email,123-456-7890,,"Unit 9 456 Example St. My City, BC V0V 0V0",Bob Lister,bob.lister@my.email,987-654-3210,987-654-3211,"2345 Another Way My City, BC V0V 0V0",654987321,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000009,https://example.com/1000009/,"3445 272 St, Aldergrove, BC V4W 3H4",54321,987654,Y,2,24,8,Teresa Homeowner,teresa.homeowner@my.email,123-456-7890,,"Unit 10 456 Example St. My City, BC V0V 0V0",Bob Lister,bob.lister@my.email,987-654-3210,987-654-3211,"3456 Another Way My City, BC V0V 0V0",654987321,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000010,https://example.com/1000010/,"200 940 Blanshard St, Victoria, BC V8W 3E6",54321,987654,Y,2,24,8,Teresa Homeowner,teresa.homeowner@my.email,123-456-7890,,"Unit 11 456 Example St. My City, BC V0V 0V0",Bob Lister,bob.lister@my.email,987-654-3210,987-654-3211,"4567 Another Way My City, BC V0V 0V0",654987321,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000011,https://example.com/1000011/,"789 Main St, Vancouver, BC V6A 2H7",67890,123456,Y,3,30,12,John Doe,john.doe@my.email,234-567-8901,,"789 Main St, Vancouver, BC V6A 2H7",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"1234 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000012,https://example.com/1000012/,"1010 Beach Ave, Vancouver, BC V6E 1T7",67890,123456,Y,1,15,6,John Doe,john.doe@my.email,234-567-8901,,"1010 Beach Ave, Vancouver, BC V6E 1T7",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"5678 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000013,https://example.com/1000013/,"201 Burrard St, Vancouver, BC V6C 3L6",67890,123456,Y,2,20,10,John Doe,john.doe@my.email,234-567-8901,,"201 Burrard St, Vancouver, BC V6C 3L6",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"9101 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000014,https://example.com/1000014/,"305 W Pender St, Vancouver, BC V6B 1T3",67890,123456,Y,1,10,5,John Doe,john.doe@my.email,234-567-8901,,"305 W Pender St, Vancouver, BC V6B 1T3",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"8765 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000015,https://example.com/1000015/,"5000 Kingsway, Burnaby, BC V5H 2E4",67890,123456,Y,2,22,9,John Doe,john.doe@my.email,234-567-8901,,"5000 Kingsway, Burnaby, BC V5H 2E4",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"5432 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000016,https://example.com/1000016/,"700 Hamilton St, Vancouver, BC V6B 2R5",67890,123456,Y,3,28,11,John Doe,john.doe@my.email,234-567-8901,,"700 Hamilton St, Vancouver, BC V6B 2R5",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"6789 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000017,https://example.com/1000017/,"800 Robson St, Vancouver, BC V6Z 2E7",67890,123456,Y,1,12,4,John Doe,john.doe@my.email,234-567-8901,,"800 Robson St, Vancouver, BC V6Z 2E7",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"2341 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000018,https://example.com/1000018/,"1200 W Georgia St, Vancouver, BC V6E 4R2",67890,123456,Y,2,18,7,John Doe,john.doe@my.email,234-567-8901,,"1200 W Georgia St, Vancouver, BC V6E 4R2",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"3452 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000019,https://example.com/1000019/,"123 Main St, Richmond, BC V6X 1A1",67890,123456,Y,3,25,10,John Doe,john.doe@my.email,234-567-8901,,"123 Main St, Richmond, BC V6X 1A1",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"5673 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000020,https://example.com/1000020/,"7890 Cambie St, Vancouver, BC V6P 3H5",67890,123456,Y,1,8,3,John Doe,john.doe@my.email,234-567-8901,,"7890 Cambie St, Vancouver, BC V6P 3H5",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"4321 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000021,https://example.com/1000021/,"2500 Commercial Dr, Vancouver, BC V5N 4B3",67890,123456,Y,2,20,8,John Doe,john.doe@my.email,234-567-8901,,"2500 Commercial Dr, Vancouver, BC V5N 4B3",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"9876 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000022,https://example.com/1000022/,"5555 Joyce St, Vancouver, BC V5R 4H1",67890,123456,Y,3,27,11,John Doe,john.doe@my.email,234-567-8901,,"5555 Joyce St, Vancouver, BC V5R 4H1",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"6543 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000023,https://example.com/1000023/,"2300 Kingsway, Vancouver, BC V5N 2T5",67890,123456,Y,2,18,7,John Doe,john.doe@my.email,234-567-8901,,"2300 Kingsway, Vancouver, BC V5N 2T5",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"5439 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000024,https://example.com/1000024/,"6000 Main St, Vancouver, BC V5W 2T7",67890,123456,Y,1,14,5,John Doe,john.doe@my.email,234-567-8901,,"6000 Main St, Vancouver, BC V5W 2T7",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"6578 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000025,https://example.com/1000025/,"8888 Fraser St, Vancouver, BC V5X 3X6",67890,123456,Y,3,32,13,John Doe,john.doe@my.email,234-567-8901,,"8888 Fraser St, Vancouver, BC V5X 3X6",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"7891 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000026,https://example.com/1000026/,"555 Burrard St, Vancouver, BC V7X 1M8",67890,123456,Y,2,24,10,John Doe,john.doe@my.email,234-567-8901,,"555 Burrard St, Vancouver, BC V7X 1M8",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"3210 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000027,https://example.com/1000027/,"700 Seymour St, Vancouver, BC V6B 3K4",67890,123456,Y,1,16,6,John Doe,john.doe@my.email,234-567-8901,,"700 Seymour St, Vancouver, BC V6B 3K4",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"1239 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000028,https://example.com/1000028/,"900 Granville St, Vancouver, BC V6Z 1L2",67890,123456,Y,3,29,12,John Doe,john.doe@my.email,234-567-8901,,"900 Granville St, Vancouver, BC V6Z 1L2",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"3458 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000029,https://example.com/1000029/,"1100 Robson St, Vancouver, BC V6E 1B5",67890,123456,Y,2,20,8,John Doe,john.doe@my.email,234-567-8901,,"1100 Robson St, Vancouver, BC V6E 1B5",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"7896 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000030,https://example.com/1000030/,"1200 Richards St, Vancouver, BC V6B 3G2",67890,123456,Y,1,11,4,John Doe,john.doe@my.email,234-567-8901,,"1200 Richards St, Vancouver, BC V6B 3G2",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"4329 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000031,https://example.com/1000031/,"1300 Homer St, Vancouver, BC V6B 5M9",67890,123456,Y,2,22,9,John Doe,john.doe@my.email,234-567-8901,,"1300 Homer St, Vancouver, BC V6B 5M9",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"6543 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000032,https://example.com/1000032/,"1400 Richards St, Vancouver, BC V6B 3G6",67890,123456,Y,3,28,11,John Doe,john.doe@my.email,234-567-8901,,"1400 Richards St, Vancouver, BC V6B 3G6",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"3458 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000033,https://example.com/1000033/,"1500 Nelson St, Vancouver, BC V6G 1M5",67890,123456,Y,1,12,5,John Doe,john.doe@my.email,234-567-8901,,"1500 Nelson St, Vancouver, BC V6G 1M5",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"9876 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000034,https://example.com/1000034/,"1600 Robson St, Vancouver, BC V6G 1C7",67890,123456,Y,2,20,8,John Doe,john.doe@my.email,234-567-8901,,"1600 Robson St, Vancouver, BC V6G 1C7",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"5432 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000035,https://example.com/1000035/,"1700 Denman St, Vancouver, BC V6G 2L3",67890,123456,Y,3,30,12,John Doe,john.doe@my.email,234-567-8901,,"1700 Denman St, Vancouver, BC V6G 2L3",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"7891 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000036,https://example.com/1000036/,"1800 Bute St, Vancouver, BC V6E 2Z2",67890,123456,Y,1,10,4,John Doe,john.doe@my.email,234-567-8901,,"1800 Bute St, Vancouver, BC V6E 2Z2",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"3210 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000037,https://example.com/1000037/,"1900 Burrard St, Vancouver, BC V6J 3G3",67890,123456,Y,2,22,9,John Doe,john.doe@my.email,234-567-8901,,"1900 Burrard St, Vancouver, BC V6J 3G3",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"5678 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000038,https://example.com/1000038/,"2000 Granville St, Vancouver, BC V6H 3H7",67890,123456,Y,3,28,11,John Doe,john.doe@my.email,234-567-8901,,"2000 Granville St, Vancouver, BC V6H 3H7",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"6789 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000039,https://example.com/1000039/,"2100 Cambie St, Vancouver, BC V5Z 4N6",67890,123456,Y,1,12,5,John Doe,john.doe@my.email,234-567-8901,,"2100 Cambie St, Vancouver, BC V5Z 4N6",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"5439 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000040,https://example.com/1000040/,"2200 Main St, Vancouver, BC V5T 3G1",67890,123456,Y,2,18,7,John Doe,john.doe@my.email,234-567-8901,,"2200 Main St, Vancouver, BC V5T 3G1",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"8765 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000041,https://example.com/1000041/,"2300 Commercial Dr, Vancouver, BC V5N 4B3",67890,123456,Y,3,27,11,John Doe,john.doe@my.email,234-567-8901,,"2300 Commercial Dr, Vancouver, BC V5N 4B3",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"7896 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000042,https://example.com/1000042/,"2400 Broadway, Vancouver, BC V5N 5M2",67890,123456,Y,1,14,5,John Doe,john.doe@my.email,234-567-8901,,"2400 Broadway, Vancouver, BC V5N 5M2",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"9871 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000043,https://example.com/1000043/,"2500 Hastings St, Vancouver, BC V5K 1Z5",67890,123456,Y,2,20,8,John Doe,john.doe@my.email,234-567-8901,,"2500 Hastings St, Vancouver, BC V5K 1Z5",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"6543 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000044,https://example.com/1000044/,"2600 Victoria Dr, Vancouver, BC V5N 4M9",67890,123456,Y,3,30,12,John Doe,john.doe@my.email,234-567-8901,,"2600 Victoria Dr, Vancouver, BC V5N 4M9",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"3452 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000045,https://example.com/1000045/,"2700 Commercial Dr, Vancouver, BC V5N 4A1",67890,123456,Y,1,10,4,John Doe,john.doe@my.email,234-567-8901,,"2700 Commercial Dr, Vancouver, BC V5N 4A1",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"6782 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000046,https://example.com/1000046/,"2800 Main St, Vancouver, BC V5T 3G1",67890,123456,Y,2,18,7,John Doe,john.doe@my.email,234-567-8901,,"2800 Main St, Vancouver, BC V5T 3G1",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"8762 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000047,https://example.com/1000047/,"2900 Broadway, Vancouver, BC V5N 5M2",67890,123456,Y,3,27,11,John Doe,john.doe@my.email,234-567-8901,,"2900 Broadway, Vancouver, BC V5N 5M2",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"5432 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000048,https://example.com/1000048/,"3000 Kingsway, Vancouver, BC V5R 5W2",67890,123456,Y,1,12,5,John Doe,john.doe@my.email,234-567-8901,,"3000 Kingsway, Vancouver, BC V5R 5W2",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"7892 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000049,https://example.com/1000049/,"3100 Victoria Dr, Vancouver, BC V5N 4L9",67890,123456,Y,2,20,8,John Doe,john.doe@my.email,234-567-8901,,"3100 Victoria Dr, Vancouver, BC V5N 4L9",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"6789 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000050,https://example.com/1000050/,"3200 Main St, Vancouver, BC V5T 3E6",67890,123456,Y,3,28,11,John Doe,john.doe@my.email,234-567-8901,,"3200 Main St, Vancouver, BC V5T 3E6",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"5439 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000051,https://example.com/1000051/,"3300 Commercial Dr, Vancouver, BC V5N 4A1",67890,123456,Y,1,14,5,John Doe,john.doe@my.email,234-567-8901,,"3300 Commercial Dr, Vancouver, BC V5N 4A1",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"8765 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000052,https://example.com/1000052/,"3400 Broadway, Vancouver, BC V5N 5N2",67890,123456,Y,2,18,7,John Doe,john.doe@my.email,234-567-8901,,"3400 Broadway, Vancouver, BC V5N 5N2",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"7896 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000053,https://example.com/1000053/,"3500 Kingsway, Vancouver, BC V5R 5X2",67890,123456,Y,3,30,12,John Doe,john.doe@my.email,234-567-8901,,"3500 Kingsway, Vancouver, BC V5R 5X2",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"9871 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000054,https://example.com/1000054/,"3600 Victoria Dr, Vancouver, BC V5N 4L9",67890,123456,Y,1,10,4,John Doe,john.doe@my.email,234-567-8901,,"3600 Victoria Dr, Vancouver, BC V5N 4L9",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"6543 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000055,https://example.com/1000055/,"3700 Main St, Vancouver, BC V5T 3G1",67890,123456,Y,2,22,9,John Doe,john.doe@my.email,234-567-8901,,"3700 Main St, Vancouver, BC V5T 3G1",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"3452 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000056,https://example.com/1000056/,"3800 Commercial Dr, Vancouver, BC V5N 4A1",67890,123456,Y,3,28,11,John Doe,john.doe@my.email,234-567-8901,,"3800 Commercial Dr, Vancouver, BC V5N 4A1",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"6782 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000057,https://example.com/1000057/,"3900 Broadway, Vancouver, BC V5N 5M2",67890,123456,Y,1,12,5,John Doe,john.doe@my.email,234-567-8901,,"3900 Broadway, Vancouver, BC V5N 5M2",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"8762 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000058,https://example.com/1000058/,"4000 Kingsway, Vancouver, BC V5R 5W2",67890,123456,Y,2,20,8,John Doe,john.doe@my.email,234-567-8901,,"4000 Kingsway, Vancouver, BC V5R 5W2",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"5432 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000059,https://example.com/1000059/,"4100 Victoria Dr, Vancouver, BC V5N 4M9",67890,123456,Y,3,27,11,John Doe,john.doe@my.email,234-567-8901,,"4100 Victoria Dr, Vancouver, BC V5N 4M9",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"7892 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000060,https://example.com/1000060/,"4200 Main St, Vancouver, BC V5T 3G1",67890,123456,Y,1,14,5,John Doe,john.doe@my.email,234-567-8901,,"4200 Main St, Vancouver, BC V5T 3G1",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"6543 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000061,https://example.com/1000061/,"4300 Commercial Dr, Vancouver, BC V5N 4A1",67890,123456,Y,2,18,7,John Doe,john.doe@my.email,234-567-8901,,"4300 Commercial Dr, Vancouver, BC V5N 4A1",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"8765 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000062,https://example.com/1000062/,"4400 Broadway, Vancouver, BC V5N 5N2",67890,123456,Y,3,30,12,John Doe,john.doe@my.email,234-567-8901,,"4400 Broadway, Vancouver, BC V5N 5N2",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"5432 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000063,https://example.com/1000063/,"4500 Kingsway, Vancouver, BC V5R 5X2",67890,123456,Y,1,10,4,John Doe,john.doe@my.email,234-567-8901,,"4500 Kingsway, Vancouver, BC V5R 5X2",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"7892 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000064,https://example.com/1000064/,"4600 Victoria Dr, Vancouver, BC V5N 4L9",67890,123456,Y,2,22,9,John Doe,john.doe@my.email,234-567-8901,,"4600 Victoria Dr, Vancouver, BC V5N 4L9",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"5432 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000065,https://example.com/1000065/,"4700 Main St, Vancouver, BC V5T 3G1",67890,123456,Y,3,28,11,John Doe,john.doe@my.email,234-567-8901,,"4700 Main St, Vancouver, BC V5T 3G1",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"8765 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000066,https://example.com/1000066/,"4800 Commercial Dr, Vancouver, BC V5N 4A1",67890,123456,Y,1,12,5,John Doe,john.doe@my.email,234-567-8901,,"4800 Commercial Dr, Vancouver, BC V5N 4A1",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"7892 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000067,https://example.com/1000067/,"4900 Broadway, Vancouver, BC V5N 5M2",67890,123456,Y,2,18,7,John Doe,john.doe@my.email,234-567-8901,,"4900 Broadway, Vancouver, BC V5N 5M2",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"5432 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000068,https://example.com/1000068/,"5000 Kingsway, Vancouver, BC V5R 5W2",67890,123456,Y,3,27,11,John Doe,john.doe@my.email,234-567-8901,,"5000 Kingsway, Vancouver, BC V5R 5W2",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"8762 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000069,https://example.com/1000069/,"5100 Victoria Dr, Vancouver, BC V5N 4L9",67890,123456,Y,1,10,4,John Doe,john.doe@my.email,234-567-8901,,"5100 Victoria Dr, Vancouver, BC V5N 4L9",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"7891 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000070,https://example.com/1000070/,"5200 Main St, Vancouver, BC V5T 3G1",67890,123456,Y,2,22,9,John Doe,john.doe@my.email,234-567-8901,,"5200 Main St, Vancouver, BC V5T 3G1",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"5432 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000071,https://example.com/1000071/,"5300 Commercial Dr, Vancouver, BC V5N 4A1",67890,123456,Y,3,28,11,John Doe,john.doe@my.email,234-567-8901,,"5300 Commercial Dr, Vancouver, BC V5N 4A1",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"8765 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000072,https://example.com/1000072/,"5400 Broadway, Vancouver, BC V5N 5N2",67890,123456,Y,1,12,5,John Doe,john.doe@my.email,234-567-8901,,"5400 Broadway, Vancouver, BC V5N 5N2",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"7892 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000073,https://example.com/1000073/,"5500 Kingsway, Vancouver, BC V5R 5X2",67890,123456,Y,2,20,8,John Doe,john.doe@my.email,234-567-8901,,"5500 Kingsway, Vancouver, BC V5R 5X2",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"5432 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000074,https://example.com/1000074/,"5600 Victoria Dr, Vancouver, BC V5N 4L9",67890,123456,Y,3,27,11,John Doe,john.doe@my.email,234-567-8901,,"5600 Victoria Dr, Vancouver, BC V5N 4L9",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"7892 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000075,https://example.com/1000075/,"5700 Main St, Vancouver, BC V5T 3G1",67890,123456,Y,1,10,4,John Doe,john.doe@my.email,234-567-8901,,"5700 Main St, Vancouver, BC V5T 3G1",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"7892 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000076,https://example.com/1000076/,"5800 Commercial Dr, Vancouver, BC V5N 4A1",67890,123456,Y,2,22,9,John Doe,john.doe@my.email,234-567-8901,,"5800 Commercial Dr, Vancouver, BC V5N 4A1",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"7892 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000077,https://example.com/1000077/,"5900 Broadway, Vancouver, BC V5N 5M2",67890,123456,Y,3,30,12,John Doe,john.doe@my.email,234-567-8901,,"5900 Broadway, Vancouver, BC V5N 5M2",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"5432 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000078,https://example.com/1000078/,"6000 Kingsway, Vancouver, BC V5R 5W2",67890,123456,Y,1,14,5,John Doe,john.doe@my.email,234-567-8901,,"6000 Kingsway, Vancouver, BC V5R 5W2",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"7892 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000079,https://example.com/1000079/,"6100 Victoria Dr, Vancouver, BC V5N 4L9",67890,123456,Y,2,18,7,John Doe,john.doe@my.email,234-567-8901,,"6100 Victoria Dr, Vancouver, BC V5N 4L9",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"5432 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000080,https://example.com/1000080/,"6200 Main St, Vancouver, BC V5T 3G1",67890,123456,Y,3,28,11,John Doe,john.doe@my.email,234-567-8901,,"6200 Main St, Vancouver, BC V5T 3G1",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"7892 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000081,https://example.com/1000081/,"6300 Commercial Dr, Vancouver, BC V5N 4A1",67890,123456,Y,1,12,5,John Doe,john.doe@my.email,234-567-8901,,"6300 Commercial Dr, Vancouver, BC V5N 4A1",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"7892 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000082,https://example.com/1000082/,"6400 Broadway, Vancouver, BC V5N 5N2",67890,123456,Y,2,20,8,John Doe,john.doe@my.email,234-567-8901,,"6400 Broadway, Vancouver, BC V5N 5N2",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"5432 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000083,https://example.com/1000083/,"6500 Kingsway, Vancouver, BC V5R 5X2",67890,123456,Y,3,27,11,John Doe,john.doe@my.email,234-567-8901,,"6500 Kingsway, Vancouver, BC V5R 5X2",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"7892 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000084,https://example.com/1000084/,"6600 Victoria Dr, Vancouver, BC V5N 4L9",67890,123456,Y,1,10,4,John Doe,john.doe@my.email,234-567-8901,,"6600 Victoria Dr, Vancouver, BC V5N 4L9",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"5432 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000085,https://example.com/1000085/,"6700 Main St, Vancouver, BC V5T 3G1",67890,123456,Y,2,18,7,John Doe,john.doe@my.email,234-567-8901,,"6700 Main St, Vancouver, BC V5T 3G1",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"7892 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000086,https://example.com/1000086/,"6800 Commercial Dr, Vancouver, BC V5N 4A1",67890,123456,Y,3,28,11,John Doe,john.doe@my.email,234-567-8901,,"6800 Commercial Dr, Vancouver, BC V5N 4A1",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"5432 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000087,https://example.com/1000087/,"6900 Broadway, Vancouver, BC V5N 5M2",67890,123456,Y,1,12,5,John Doe,john.doe@my.email,234-567-8901,,"6900 Broadway, Vancouver, BC V5N 5M2",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"7892 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000088,https://example.com/1000088/,"7000 Kingsway, Vancouver, BC V5R 5W2",67890,123456,Y,2,22,9,John Doe,john.doe@my.email,234-567-8901,,"7000 Kingsway, Vancouver, BC V5R 5W2",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"5432 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000089,https://example.com/1000089/,"7100 Victoria Dr, Vancouver, BC V5N 4L9",67890,123456,Y,3,30,12,John Doe,john.doe@my.email,234-567-8901,,"7100 Victoria Dr, Vancouver, BC V5N 4L9",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"7892 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000091,https://example.com/1000091/,"1000 Fort St, Victoria, BC V8V 3K4",67890,123456,Y,2,22,9,John Doe,john.doe@my.email,234-567-8901,,"1000 Fort St, Victoria, BC V8V 3K4",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"8765 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000092,https://example.com/1000092/,"1100 Blanshard St, Victoria, BC V8W 2H5",67890,123456,Y,1,10,4,John Doe,john.doe@my.email,234-567-8901,,"1100 Blanshard St, Victoria, BC V8W 2H5",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"5432 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000093,https://example.com/1000093/,"1200 Government St, Victoria, BC V8W 1Y2",67890,123456,Y,3,27,11,John Doe,john.doe@my.email,234-567-8901,,"1200 Government St, Victoria, BC V8W 1Y2",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"8765 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000094,https://example.com/1000094/,"1300 Douglas St, Victoria, BC V8W 2E7",67890,123456,Y,2,18,7,John Doe,john.doe@my.email,234-567-8901,,"1300 Douglas St, Victoria, BC V8W 2E7",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"5432 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000095,https://example.com/1000095/,"1400 Yates St, Victoria, BC V8V 3K8",67890,123456,Y,3,30,12,John Doe,john.doe@my.email,234-567-8901,,"1400 Yates St, Victoria, BC V8V 3K8",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"8765 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000096,https://example.com/1000096/,"1500 Vancouver St, Victoria, BC V8V 4C7",67890,123456,Y,1,12,5,John Doe,john.doe@my.email,234-567-8901,,"1500 Vancouver St, Victoria, BC V8V 4C7",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"5432 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000097,https://example.com/1000097/,"1600 Hillside Ave, Victoria, BC V8T 2C3",67890,123456,Y,2,20,8,John Doe,john.doe@my.email,234-567-8901,,"1600 Hillside Ave, Victoria, BC V8T 2C3",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"8765 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000098,https://example.com/1000098/,"1700 Oak Bay Ave, Victoria, BC V8R 1B3",67890,123456,Y,3,28,11,John Doe,john.doe@my.email,234-567-8901,,"1700 Oak Bay Ave, Victoria, BC V8R 1B3",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"5432 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000099,https://example.com/1000099/,"1800 Fairfield Rd, Victoria, BC V8S 1G4",67890,123456,Y,1,10,4,John Doe,john.doe@my.email,234-567-8901,,"1800 Fairfield Rd, Victoria, BC V8S 1G4",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"8765 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000100,https://example.com/1000100/,"1900 Cook St, Victoria, BC V8T 3P4",67890,123456,Y,2,22,9,John Doe,john.doe@my.email,234-567-8901,,"1900 Cook St, Victoria, BC V8T 3P4",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"5432 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000101,https://example.com/1000101/,"2000 Johnson St, Victoria, BC V8T 3H2",67890,123456,Y,3,27,11,John Doe,john.doe@my.email,234-567-8901,,"2000 Johnson St, Victoria, BC V8T 3H2",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"8765 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000102,https://example.com/1000102/,"2100 Bay St, Victoria, BC V8T 1Y3",67890,123456,Y,1,12,5,John Doe,john.doe@my.email,234-567-8901,,"2100 Bay St, Victoria, BC V8T 1Y3",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"5432 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000103,https://example.com/1000103/,"2200 Foul Bay Rd, Victoria, BC V8R 2C8",67890,123456,Y,2,20,8,John Doe,john.doe@my.email,234-567-8901,,"2200 Foul Bay Rd, Victoria, BC V8R 2C8",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"8765 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000104,https://example.com/1000104/,"2300 Shelbourne St, Victoria, BC V8R 4N9",67890,123456,Y,3,28,11,John Doe,john.doe@my.email,234-567-8901,,"2300 Shelbourne St, Victoria, BC V8R 4N9",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"5432 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000105,https://example.com/1000105/,"2400 Richmond Rd, Victoria, BC V8R 4V6",67890,123456,Y,1,10,4,John Doe,john.doe@my.email,234-567-8901,,"2400 Richmond Rd, Victoria, BC V8R 4V6",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"8765 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000106,https://example.com/1000106/,"2500 Cedar Hill Rd, Victoria, BC V8P 3Z4",67890,123456,Y,2,22,9,John Doe,john.doe@my.email,234-567-8901,,"2500 Cedar Hill Rd, Victoria, BC V8P 3Z4",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"5432 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000107,https://example.com/1000107/,"2600 Hillside Ave, Victoria, BC V8T 1Z4",67890,123456,Y,3,27,11,John Doe,john.doe@my.email,234-567-8901,,"2600 Hillside Ave, Victoria, BC V8T 1Z4",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"8765 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000108,https://example.com/1000108/,"2700 Cook St, Victoria, BC V8T 3R7",67890,123456,Y,1,12,5,John Doe,john.doe@my.email,234-567-8901,,"2700 Cook St, Victoria, BC V8T 3R7",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"5432 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000109,https://example.com/1000109/,"2800 Quadra St, Victoria, BC V8T 4E2",67890,123456,Y,2,20,8,John Doe,john.doe@my.email,234-567-8901,,"2800 Quadra St, Victoria, BC V8T 4E2",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"8765 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000110,https://example.com/1000110/,"2900 Burnside Rd, Victoria, BC V8T 5B4",67890,123456,Y,3,28,11,John Doe,john.doe@my.email,234-567-8901,,"2900 Burnside Rd, Victoria, BC V8T 5B4",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"5432 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000111,https://example.com/1000111/,"3000 Gorge Rd, Victoria, BC V9A 1M9",67890,123456,Y,1,10,4,John Doe,john.doe@my.email,234-567-8901,,"3000 Gorge Rd, Victoria, BC V9A 1M9",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"8765 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000112,https://example.com/1000112/,"3100 Tillicum Rd, Victoria, BC V9A 2A5",67890,123456,Y,2,22,9,John Doe,john.doe@my.email,234-567-8901,,"3100 Tillicum Rd, Victoria, BC V9A 2A5",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"5432 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000113,https://example.com/1000113/,"3200 Admirals Rd, Victoria, BC V9A 2P6",67890,123456,Y,3,27,11,John Doe,john.doe@my.email,234-567-8901,,"3200 Admirals Rd, Victoria, BC V9A 2P6",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"8765 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000114,https://example.com/1000114/,"3300 Harriet Rd, Victoria, BC V8Z 3S8",67890,123456,Y,1,12,5,John Doe,john.doe@my.email,234-567-8901,,"3300 Harriet Rd, Victoria, BC V8Z 3S8",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"5432 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000115,https://example.com/1000115/,"3400 Burnside Rd, Victoria, BC V8Z 3X2",67890,123456,Y,2,20,8,John Doe,john.doe@my.email,234-567-8901,,"3400 Burnside Rd, Victoria, BC V8Z 3X2",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"8765 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000116,https://example.com/1000116/,"3500 McKenzie Ave, Victoria, BC V8P 2M7",67890,123456,Y,3,28,11,John Doe,john.doe@my.email,234-567-8901,,"3500 McKenzie Ave, Victoria, BC V8P 2M7",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"5432 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000117,https://example.com/1000117/,"3600 Shelbourne St, Victoria, BC V8P 4H2",67890,123456,Y,1,10,4,John Doe,john.doe@my.email,234-567-8901,,"3600 Shelbourne St, Victoria, BC V8P 4H2",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"8765 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000118,https://example.com/1000118/,"3700 McRae Ave, Victoria, BC V8P 2G7",67890,123456,Y,2,22,9,John Doe,john.doe@my.email,234-567-8901,,"3700 McRae Ave, Victoria, BC V8P 2G7",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"5432 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000119,https://example.com/1000119/,"3800 Cedar Hill Rd, Victoria, BC V8P 3Z4",67890,123456,Y,3,27,11,John Doe,john.doe@my.email,234-567-8901,,"3800 Cedar Hill Rd, Victoria, BC V8P 3Z4",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"8765 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000120,https://example.com/1000120/,"3900 Richmond Rd, Victoria, BC V8R 4V6",67890,123456,Y,1,12,5,John Doe,john.doe@my.email,234-567-8901,,"3900 Richmond Rd, Victoria, BC V8R 4V6",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"5432 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, -2024-04,PLATFORMTEST,1000121,https://example.com/1000121/,"4000 Cedar Hill Cross Rd, Victoria, BC V8P 2N4",67890,123456,Y,2,20,8,John Doe,john.doe@my.email,234-567-8901,,"4000 Cedar Hill Cross Rd, Victoria, BC V8P 2N4",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"8765 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000002,https://example.com/1000002/,"125 Atkins Rd, Victoria, BC V9B 6V4",54321,987654,Y,2,24,8,Teresa Homeowner,teresa.homeowner@my.email ,123-456-7890,,"125 Atkins Rd, Victoria, BC V9B 6V4",Bob Lister,bob.lister@my.email,987-654-3210,987-654-3211,"23668 36a Ave, Langley Twp, BC V4Z 2J6",654987321,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000004,https://example.com/1000004/,"23904 Fraser Hwy, Langley Twp, BC V2Z 2K8",54321,987654,Y,2,24,8,Teresa Homeowner,teresa.homeowner@my.email,123-456-7890,,"Unit 5 456 Example St. My City, BC V0V 0V0",Bob Lister,bob.lister@my.email,987-654-3210,987-654-3211,"8901 Another Way My City, BC V0V 0V0",654987321,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000005,https://example.com/2000005/,"Unit 5 456 Example St. My City, BC",54321,987654,Y,2,24,8,Teresa Homeowner,teresa.homeowner@my.email,123-456-7890,,"Unit 6 456 Example St. My City, BC V0V 0V0",Bob Lister,bob.lister@my.email,987-654-3210,987-654-3211,"9012 Another Way My City, BC V0V 0V0",654987321,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000006,https://example.com/1000006/,"Unit 6 456 Example St. My City, BC",54321,987654,Y,2,24,8,Teresa Homeowner,teresa.homeowner@my.email,123-456-7890,,"Unit 7 456 Example St. My City, BC V0V 0V0",Bob Lister,bob.lister@my.email,987-654-3210,987-654-3211,"0123 Another Way My City, BC V0V 0V0",654987321,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000007,https://example.com/1000007/,"Unit 7 456 Example St. y City, BC",54321,987654,Y,2,24,8,Teresa Homeowner,teresa.homeowner@my.email,123-456-7890,,"Unit 8 456 Example St. My City, BC V0V 0V0",Bob Lister,bob.lister@my.email,987-654-3210,987-654-3211,"1234 Another Way My City, BC V0V 0V0",654987321,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000008,https://example.com/1000008/,"Unit 8 456 Example St. My City, BC",54321,987654,Y,2,24,8,Teresa Homeowner,teresa.homeowner@my.email,123-456-7890,,"Unit 9 456 Example St. My City, BC V0V 0V0",Bob Lister,bob.lister@my.email,987-654-3210,987-654-3211,"2345 Another Way My City, BC V0V 0V0",654987321,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000009,https://example.com/1000009/,"3445 272 St, Aldergrove, BC V4W 3H4",54321,987654,Y,2,24,8,Teresa Homeowner,teresa.homeowner@my.email,123-456-7890,,"Unit 10 456 Example St. My City, BC V0V 0V0",Bob Lister,bob.lister@my.email,987-654-3210,987-654-3211,"3456 Another Way My City, BC V0V 0V0",654987321,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000010,https://example.com/1000010/,"200 940 Blanshard St, Victoria, BC V8W 3E6",54321,987654,Y,2,24,8,Teresa Homeowner,teresa.homeowner@my.email,123-456-7890,,"Unit 11 456 Example St. My City, BC V0V 0V0",Bob Lister,bob.lister@my.email,987-654-3210,987-654-3211,"4567 Another Way My City, BC V0V 0V0",654987321,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000011,https://example.com/1000011/,"789 Main St, Vancouver, BC V6A 2H7",67890,123456,Y,3,30,12,John Doe,john.doe@my.email,234-567-8901,,"789 Main St, Vancouver, BC V6A 2H7",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"1234 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000012,https://example.com/1000012/,"1010 Beach Ave, Vancouver, BC V6E 1T7",67890,123456,Y,1,15,6,John Doe,john.doe@my.email,234-567-8901,,"1010 Beach Ave, Vancouver, BC V6E 1T7",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"5678 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000013,https://example.com/1000013/,"201 Burrard St, Vancouver, BC V6C 3L6",67890,123456,Y,2,20,10,John Doe,john.doe@my.email,234-567-8901,,"201 Burrard St, Vancouver, BC V6C 3L6",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"9101 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000014,https://example.com/1000014/,"305 W Pender St, Vancouver, BC V6B 1T3",67890,123456,Y,1,10,5,John Doe,john.doe@my.email,234-567-8901,,"305 W Pender St, Vancouver, BC V6B 1T3",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"8765 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000015,https://example.com/1000015/,"5000 Kingsway, Burnaby, BC V5H 2E4",67890,123456,Y,2,22,9,John Doe,john.doe@my.email,234-567-8901,,"5000 Kingsway, Burnaby, BC V5H 2E4",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"5432 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000016,https://example.com/1000016/,"700 Hamilton St, Vancouver, BC V6B 2R5",67890,123456,Y,3,28,11,John Doe,john.doe@my.email,234-567-8901,,"700 Hamilton St, Vancouver, BC V6B 2R5",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"6789 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000017,https://example.com/1000017/,"800 Robson St, Vancouver, BC V6Z 2E7",67890,123456,Y,1,12,4,John Doe,john.doe@my.email,234-567-8901,,"800 Robson St, Vancouver, BC V6Z 2E7",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"2341 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000018,https://example.com/1000018/,"1200 W Georgia St, Vancouver, BC V6E 4R2",67890,123456,Y,2,18,7,John Doe,john.doe@my.email,234-567-8901,,"1200 W Georgia St, Vancouver, BC V6E 4R2",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"3452 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000019,https://example.com/1000019/,"123 Main St, Richmond, BC V6X 1A1",67890,123456,Y,3,25,10,John Doe,john.doe@my.email,234-567-8901,,"123 Main St, Richmond, BC V6X 1A1",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"5673 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000020,https://example.com/1000020/,"7890 Cambie St, Vancouver, BC V6P 3H5",67890,123456,Y,1,8,3,John Doe,john.doe@my.email,234-567-8901,,"7890 Cambie St, Vancouver, BC V6P 3H5",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"4321 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000021,https://example.com/1000021/,"2500 Commercial Dr, Vancouver, BC V5N 4B3",67890,123456,Y,2,20,8,John Doe,john.doe@my.email,234-567-8901,,"2500 Commercial Dr, Vancouver, BC V5N 4B3",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"9876 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000022,https://example.com/1000022/,"5555 Joyce St, Vancouver, BC V5R 4H1",67890,123456,Y,3,27,11,John Doe,john.doe@my.email,234-567-8901,,"5555 Joyce St, Vancouver, BC V5R 4H1",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"6543 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000023,https://example.com/1000023/,"2300 Kingsway, Vancouver, BC V5N 2T5",67890,123456,Y,2,18,7,John Doe,john.doe@my.email,234-567-8901,,"2300 Kingsway, Vancouver, BC V5N 2T5",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"5439 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000024,https://example.com/1000024/,"6000 Main St, Vancouver, BC V5W 2T7",67890,123456,Y,1,14,5,John Doe,john.doe@my.email,234-567-8901,,"6000 Main St, Vancouver, BC V5W 2T7",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"6578 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000025,https://example.com/1000025/,"8888 Fraser St, Vancouver, BC V5X 3X6",67890,123456,Y,3,32,13,John Doe,john.doe@my.email,234-567-8901,,"8888 Fraser St, Vancouver, BC V5X 3X6",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"7891 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000026,https://example.com/1000026/,"555 Burrard St, Vancouver, BC V7X 1M8",67890,123456,Y,2,24,10,John Doe,john.doe@my.email,234-567-8901,,"555 Burrard St, Vancouver, BC V7X 1M8",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"3210 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000027,https://example.com/1000027/,"700 Seymour St, Vancouver, BC V6B 3K4",67890,123456,Y,1,16,6,John Doe,john.doe@my.email,234-567-8901,,"700 Seymour St, Vancouver, BC V6B 3K4",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"1239 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000028,https://example.com/1000028/,"900 Granville St, Vancouver, BC V6Z 1L2",67890,123456,Y,3,29,12,John Doe,john.doe@my.email,234-567-8901,,"900 Granville St, Vancouver, BC V6Z 1L2",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"3458 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000029,https://example.com/1000029/,"1100 Robson St, Vancouver, BC V6E 1B5",67890,123456,Y,2,20,8,John Doe,john.doe@my.email,234-567-8901,,"1100 Robson St, Vancouver, BC V6E 1B5",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"7896 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000030,https://example.com/1000030/,"1200 Richards St, Vancouver, BC V6B 3G2",67890,123456,Y,1,11,4,John Doe,john.doe@my.email,234-567-8901,,"1200 Richards St, Vancouver, BC V6B 3G2",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"4329 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000031,https://example.com/1000031/,"1300 Homer St, Vancouver, BC V6B 5M9",67890,123456,Y,2,22,9,John Doe,john.doe@my.email,234-567-8901,,"1300 Homer St, Vancouver, BC V6B 5M9",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"6543 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000032,https://example.com/1000032/,"1400 Richards St, Vancouver, BC V6B 3G6",67890,123456,Y,3,28,11,John Doe,john.doe@my.email,234-567-8901,,"1400 Richards St, Vancouver, BC V6B 3G6",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"3458 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000033,https://example.com/1000033/,"1500 Nelson St, Vancouver, BC V6G 1M5",67890,123456,Y,1,12,5,John Doe,john.doe@my.email,234-567-8901,,"1500 Nelson St, Vancouver, BC V6G 1M5",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"9876 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000034,https://example.com/1000034/,"1600 Robson St, Vancouver, BC V6G 1C7",67890,123456,Y,2,20,8,John Doe,john.doe@my.email,234-567-8901,,"1600 Robson St, Vancouver, BC V6G 1C7",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"5432 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000035,https://example.com/1000035/,"1700 Denman St, Vancouver, BC V6G 2L3",67890,123456,Y,3,30,12,John Doe,john.doe@my.email,234-567-8901,,"1700 Denman St, Vancouver, BC V6G 2L3",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"7891 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000036,https://example.com/1000036/,"1800 Bute St, Vancouver, BC V6E 2Z2",67890,123456,Y,1,10,4,John Doe,john.doe@my.email,234-567-8901,,"1800 Bute St, Vancouver, BC V6E 2Z2",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"3210 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000037,https://example.com/1000037/,"1900 Burrard St, Vancouver, BC V6J 3G3",67890,123456,Y,2,22,9,John Doe,john.doe@my.email,234-567-8901,,"1900 Burrard St, Vancouver, BC V6J 3G3",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"5678 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000038,https://example.com/1000038/,"2000 Granville St, Vancouver, BC V6H 3H7",67890,123456,Y,3,28,11,John Doe,john.doe@my.email,234-567-8901,,"2000 Granville St, Vancouver, BC V6H 3H7",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"6789 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000039,https://example.com/1000039/,"2100 Cambie St, Vancouver, BC V5Z 4N6",67890,123456,Y,1,12,5,John Doe,john.doe@my.email,234-567-8901,,"2100 Cambie St, Vancouver, BC V5Z 4N6",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"5439 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000040,https://example.com/1000040/,"2200 Main St, Vancouver, BC V5T 3G1",67890,123456,Y,2,18,7,John Doe,john.doe@my.email,234-567-8901,,"2200 Main St, Vancouver, BC V5T 3G1",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"8765 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000041,https://example.com/1000041/,"2300 Commercial Dr, Vancouver, BC V5N 4B3",67890,123456,Y,3,27,11,John Doe,john.doe@my.email,234-567-8901,,"2300 Commercial Dr, Vancouver, BC V5N 4B3",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"7896 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000042,https://example.com/1000042/,"2400 Broadway, Vancouver, BC V5N 5M2",67890,123456,Y,1,14,5,John Doe,john.doe@my.email,234-567-8901,,"2400 Broadway, Vancouver, BC V5N 5M2",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"9871 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000043,https://example.com/1000043/,"2500 Hastings St, Vancouver, BC V5K 1Z5",67890,123456,Y,2,20,8,John Doe,john.doe@my.email,234-567-8901,,"2500 Hastings St, Vancouver, BC V5K 1Z5",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"6543 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000044,https://example.com/1000044/,"2600 Victoria Dr, Vancouver, BC V5N 4M9",67890,123456,Y,3,30,12,John Doe,john.doe@my.email,234-567-8901,,"2600 Victoria Dr, Vancouver, BC V5N 4M9",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"3452 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000045,https://example.com/1000045/,"2700 Commercial Dr, Vancouver, BC V5N 4A1",67890,123456,Y,1,10,4,John Doe,john.doe@my.email,234-567-8901,,"2700 Commercial Dr, Vancouver, BC V5N 4A1",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"6782 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000046,https://example.com/1000046/,"2800 Main St, Vancouver, BC V5T 3G1",67890,123456,Y,2,18,7,John Doe,john.doe@my.email,234-567-8901,,"2800 Main St, Vancouver, BC V5T 3G1",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"8762 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000047,https://example.com/1000047/,"2900 Broadway, Vancouver, BC V5N 5M2",67890,123456,Y,3,27,11,John Doe,john.doe@my.email,234-567-8901,,"2900 Broadway, Vancouver, BC V5N 5M2",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"5432 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000048,https://example.com/1000048/,"3000 Kingsway, Vancouver, BC V5R 5W2",67890,123456,Y,1,12,5,John Doe,john.doe@my.email,234-567-8901,,"3000 Kingsway, Vancouver, BC V5R 5W2",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"7892 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000049,https://example.com/1000049/,"3100 Victoria Dr, Vancouver, BC V5N 4L9",67890,123456,Y,2,20,8,John Doe,john.doe@my.email,234-567-8901,,"3100 Victoria Dr, Vancouver, BC V5N 4L9",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"6789 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000050,https://example.com/1000050/,"3200 Main St, Vancouver, BC V5T 3E6",67890,123456,Y,3,28,11,John Doe,john.doe@my.email,234-567-8901,,"3200 Main St, Vancouver, BC V5T 3E6",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"5439 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000051,https://example.com/1000051/,"3300 Commercial Dr, Vancouver, BC V5N 4A1",67890,123456,Y,1,14,5,John Doe,john.doe@my.email,234-567-8901,,"3300 Commercial Dr, Vancouver, BC V5N 4A1",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"8765 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000052,https://example.com/1000052/,"3400 Broadway, Vancouver, BC V5N 5N2",67890,123456,Y,2,18,7,John Doe,john.doe@my.email,234-567-8901,,"3400 Broadway, Vancouver, BC V5N 5N2",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"7896 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000053,https://example.com/1000053/,"3500 Kingsway, Vancouver, BC V5R 5X2",67890,123456,Y,3,30,12,John Doe,john.doe@my.email,234-567-8901,,"3500 Kingsway, Vancouver, BC V5R 5X2",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"9871 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000054,https://example.com/1000054/,"3600 Victoria Dr, Vancouver, BC V5N 4L9",67890,123456,Y,1,10,4,John Doe,john.doe@my.email,234-567-8901,,"3600 Victoria Dr, Vancouver, BC V5N 4L9",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"6543 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000055,https://example.com/1000055/,"3700 Main St, Vancouver, BC V5T 3G1",67890,123456,Y,2,22,9,John Doe,john.doe@my.email,234-567-8901,,"3700 Main St, Vancouver, BC V5T 3G1",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"3452 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000056,https://example.com/1000056/,"3800 Commercial Dr, Vancouver, BC V5N 4A1",67890,123456,Y,3,28,11,John Doe,john.doe@my.email,234-567-8901,,"3800 Commercial Dr, Vancouver, BC V5N 4A1",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"6782 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000057,https://example.com/1000057/,"3900 Broadway, Vancouver, BC V5N 5M2",67890,123456,Y,1,12,5,John Doe,john.doe@my.email,234-567-8901,,"3900 Broadway, Vancouver, BC V5N 5M2",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"8762 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000058,https://example.com/1000058/,"4000 Kingsway, Vancouver, BC V5R 5W2",67890,123456,Y,2,20,8,John Doe,john.doe@my.email,234-567-8901,,"4000 Kingsway, Vancouver, BC V5R 5W2",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"5432 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000059,https://example.com/1000059/,"4100 Victoria Dr, Vancouver, BC V5N 4M9",67890,123456,Y,3,27,11,John Doe,john.doe@my.email,234-567-8901,,"4100 Victoria Dr, Vancouver, BC V5N 4M9",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"7892 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000060,https://example.com/1000060/,"4200 Main St, Vancouver, BC V5T 3G1",67890,123456,Y,1,14,5,John Doe,john.doe@my.email,234-567-8901,,"4200 Main St, Vancouver, BC V5T 3G1",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"6543 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000061,https://example.com/1000061/,"4300 Commercial Dr, Vancouver, BC V5N 4A1",67890,123456,Y,2,18,7,John Doe,john.doe@my.email,234-567-8901,,"4300 Commercial Dr, Vancouver, BC V5N 4A1",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"8765 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000062,https://example.com/1000062/,"4400 Broadway, Vancouver, BC V5N 5N2",67890,123456,Y,3,30,12,John Doe,john.doe@my.email,234-567-8901,,"4400 Broadway, Vancouver, BC V5N 5N2",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"5432 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000063,https://example.com/1000063/,"4500 Kingsway, Vancouver, BC V5R 5X2",67890,123456,Y,1,10,4,John Doe,john.doe@my.email,234-567-8901,,"4500 Kingsway, Vancouver, BC V5R 5X2",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"7892 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000064,https://example.com/1000064/,"4600 Victoria Dr, Vancouver, BC V5N 4L9",67890,123456,Y,2,22,9,John Doe,john.doe@my.email,234-567-8901,,"4600 Victoria Dr, Vancouver, BC V5N 4L9",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"5432 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000065,https://example.com/1000065/,"4700 Main St, Vancouver, BC V5T 3G1",67890,123456,Y,3,28,11,John Doe,john.doe@my.email,234-567-8901,,"4700 Main St, Vancouver, BC V5T 3G1",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"8765 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000066,https://example.com/1000066/,"4800 Commercial Dr, Vancouver, BC V5N 4A1",67890,123456,Y,1,12,5,John Doe,john.doe@my.email,234-567-8901,,"4800 Commercial Dr, Vancouver, BC V5N 4A1",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"7892 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000067,https://example.com/1000067/,"4900 Broadway, Vancouver, BC V5N 5M2",67890,123456,Y,2,18,7,John Doe,john.doe@my.email,234-567-8901,,"4900 Broadway, Vancouver, BC V5N 5M2",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"5432 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000068,https://example.com/1000068/,"5000 Kingsway, Vancouver, BC V5R 5W2",67890,123456,Y,3,27,11,John Doe,john.doe@my.email,234-567-8901,,"5000 Kingsway, Vancouver, BC V5R 5W2",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"8762 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000069,https://example.com/1000069/,"5100 Victoria Dr, Vancouver, BC V5N 4L9",67890,123456,Y,1,10,4,John Doe,john.doe@my.email,234-567-8901,,"5100 Victoria Dr, Vancouver, BC V5N 4L9",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"7891 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000070,https://example.com/1000070/,"5200 Main St, Vancouver, BC V5T 3G1",67890,123456,Y,2,22,9,John Doe,john.doe@my.email,234-567-8901,,"5200 Main St, Vancouver, BC V5T 3G1",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"5432 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000071,https://example.com/1000071/,"5300 Commercial Dr, Vancouver, BC V5N 4A1",67890,123456,Y,3,28,11,John Doe,john.doe@my.email,234-567-8901,,"5300 Commercial Dr, Vancouver, BC V5N 4A1",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"8765 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000072,https://example.com/1000072/,"5400 Broadway, Vancouver, BC V5N 5N2",67890,123456,Y,1,12,5,John Doe,john.doe@my.email,234-567-8901,,"5400 Broadway, Vancouver, BC V5N 5N2",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"7892 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000073,https://example.com/1000073/,"5500 Kingsway, Vancouver, BC V5R 5X2",67890,123456,Y,2,20,8,John Doe,john.doe@my.email,234-567-8901,,"5500 Kingsway, Vancouver, BC V5R 5X2",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"5432 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000074,https://example.com/1000074/,"5600 Victoria Dr, Vancouver, BC V5N 4L9",67890,123456,Y,3,27,11,John Doe,john.doe@my.email,234-567-8901,,"5600 Victoria Dr, Vancouver, BC V5N 4L9",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"7892 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000075,https://example.com/1000075/,"5700 Main St, Vancouver, BC V5T 3G1",67890,123456,Y,1,10,4,John Doe,john.doe@my.email,234-567-8901,,"5700 Main St, Vancouver, BC V5T 3G1",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"7892 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000076,https://example.com/1000076/,"5800 Commercial Dr, Vancouver, BC V5N 4A1",67890,123456,Y,2,22,9,John Doe,john.doe@my.email,234-567-8901,,"5800 Commercial Dr, Vancouver, BC V5N 4A1",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"7892 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000077,https://example.com/1000077/,"5900 Broadway, Vancouver, BC V5N 5M2",67890,123456,Y,3,30,12,John Doe,john.doe@my.email,234-567-8901,,"5900 Broadway, Vancouver, BC V5N 5M2",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"5432 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000078,https://example.com/1000078/,"6000 Kingsway, Vancouver, BC V5R 5W2",67890,123456,Y,1,14,5,John Doe,john.doe@my.email,234-567-8901,,"6000 Kingsway, Vancouver, BC V5R 5W2",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"7892 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000079,https://example.com/1000079/,"6100 Victoria Dr, Vancouver, BC V5N 4L9",67890,123456,Y,2,18,7,John Doe,john.doe@my.email,234-567-8901,,"6100 Victoria Dr, Vancouver, BC V5N 4L9",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"5432 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000080,https://example.com/1000080/,"6200 Main St, Vancouver, BC V5T 3G1",67890,123456,Y,3,28,11,John Doe,john.doe@my.email,234-567-8901,,"6200 Main St, Vancouver, BC V5T 3G1",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"7892 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000081,https://example.com/1000081/,"6300 Commercial Dr, Vancouver, BC V5N 4A1",67890,123456,Y,1,12,5,John Doe,john.doe@my.email,234-567-8901,,"6300 Commercial Dr, Vancouver, BC V5N 4A1",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"7892 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000082,https://example.com/1000082/,"6400 Broadway, Vancouver, BC V5N 5N2",67890,123456,Y,2,20,8,John Doe,john.doe@my.email,234-567-8901,,"6400 Broadway, Vancouver, BC V5N 5N2",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"5432 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000083,https://example.com/1000083/,"6500 Kingsway, Vancouver, BC V5R 5X2",67890,123456,Y,3,27,11,John Doe,john.doe@my.email,234-567-8901,,"6500 Kingsway, Vancouver, BC V5R 5X2",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"7892 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000084,https://example.com/1000084/,"6600 Victoria Dr, Vancouver, BC V5N 4L9",67890,123456,Y,1,10,4,John Doe,john.doe@my.email,234-567-8901,,"6600 Victoria Dr, Vancouver, BC V5N 4L9",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"5432 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000085,https://example.com/1000085/,"6700 Main St, Vancouver, BC V5T 3G1",67890,123456,Y,2,18,7,John Doe,john.doe@my.email,234-567-8901,,"6700 Main St, Vancouver, BC V5T 3G1",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"7892 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000086,https://example.com/1000086/,"6800 Commercial Dr, Vancouver, BC V5N 4A1",67890,123456,Y,3,28,11,John Doe,john.doe@my.email,234-567-8901,,"6800 Commercial Dr, Vancouver, BC V5N 4A1",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"5432 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000087,https://example.com/1000087/,"6900 Broadway, Vancouver, BC V5N 5M2",67890,123456,Y,1,12,5,John Doe,john.doe@my.email,234-567-8901,,"6900 Broadway, Vancouver, BC V5N 5M2",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"7892 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000088,https://example.com/1000088/,"7000 Kingsway, Vancouver, BC V5R 5W2",67890,123456,Y,2,22,9,John Doe,john.doe@my.email,234-567-8901,,"7000 Kingsway, Vancouver, BC V5R 5W2",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"5432 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000089,https://example.com/1000089/,"7100 Victoria Dr, Vancouver, BC V5N 4L9",67890,123456,Y,3,30,12,John Doe,john.doe@my.email,234-567-8901,,"7100 Victoria Dr, Vancouver, BC V5N 4L9",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"7892 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000091,https://example.com/1000091/,"1000 Fort St, Victoria, BC V8V 3K4",67890,123456,Y,2,22,9,John Doe,john.doe@my.email,234-567-8901,,"1000 Fort St, Victoria, BC V8V 3K4",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"8765 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000092,https://example.com/1000092/,"1100 Blanshard St, Victoria, BC V8W 2H5",67890,123456,Y,1,10,4,John Doe,john.doe@my.email,234-567-8901,,"1100 Blanshard St, Victoria, BC V8W 2H5",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"5432 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000093,https://example.com/1000093/,"1200 Government St, Victoria, BC V8W 1Y2",67890,123456,Y,3,27,11,John Doe,john.doe@my.email,234-567-8901,,"1200 Government St, Victoria, BC V8W 1Y2",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"8765 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000094,https://example.com/1000094/,"1300 Douglas St, Victoria, BC V8W 2E7",67890,123456,Y,2,18,7,John Doe,john.doe@my.email,234-567-8901,,"1300 Douglas St, Victoria, BC V8W 2E7",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"5432 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000095,https://example.com/1000095/,"1400 Yates St, Victoria, BC V8V 3K8",67890,123456,Y,3,30,12,John Doe,john.doe@my.email,234-567-8901,,"1400 Yates St, Victoria, BC V8V 3K8",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"8765 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000096,https://example.com/1000096/,"1500 Vancouver St, Victoria, BC V8V 4C7",67890,123456,Y,1,12,5,John Doe,john.doe@my.email,234-567-8901,,"1500 Vancouver St, Victoria, BC V8V 4C7",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"5432 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000097,https://example.com/1000097/,"1600 Hillside Ave, Victoria, BC V8T 2C3",67890,123456,Y,2,20,8,John Doe,john.doe@my.email,234-567-8901,,"1600 Hillside Ave, Victoria, BC V8T 2C3",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"8765 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000098,https://example.com/1000098/,"1700 Oak Bay Ave, Victoria, BC V8R 1B3",67890,123456,Y,3,28,11,John Doe,john.doe@my.email,234-567-8901,,"1700 Oak Bay Ave, Victoria, BC V8R 1B3",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"5432 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000099,https://example.com/1000099/,"1800 Fairfield Rd, Victoria, BC V8S 1G4",67890,123456,Y,1,10,4,John Doe,john.doe@my.email,234-567-8901,,"1800 Fairfield Rd, Victoria, BC V8S 1G4",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"8765 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000100,https://example.com/1000100/,"1900 Cook St, Victoria, BC V8T 3P4",67890,123456,Y,2,22,9,John Doe,john.doe@my.email,234-567-8901,,"1900 Cook St, Victoria, BC V8T 3P4",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"5432 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000101,https://example.com/1000101/,"2000 Johnson St, Victoria, BC V8T 3H2",67890,123456,Y,3,27,11,John Doe,john.doe@my.email,234-567-8901,,"2000 Johnson St, Victoria, BC V8T 3H2",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"8765 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000102,https://example.com/1000102/,"2100 Bay St, Victoria, BC V8T 1Y3",67890,123456,Y,1,12,5,John Doe,john.doe@my.email,234-567-8901,,"2100 Bay St, Victoria, BC V8T 1Y3",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"5432 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000103,https://example.com/1000103/,"2200 Foul Bay Rd, Victoria, BC V8R 2C8",67890,123456,Y,2,20,8,John Doe,john.doe@my.email,234-567-8901,,"2200 Foul Bay Rd, Victoria, BC V8R 2C8",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"8765 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000104,https://example.com/1000104/,"2300 Shelbourne St, Victoria, BC V8R 4N9",67890,123456,Y,3,28,11,John Doe,john.doe@my.email,234-567-8901,,"2300 Shelbourne St, Victoria, BC V8R 4N9",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"5432 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000105,https://example.com/1000105/,"2400 Richmond Rd, Victoria, BC V8R 4V6",67890,123456,Y,1,10,4,John Doe,john.doe@my.email,234-567-8901,,"2400 Richmond Rd, Victoria, BC V8R 4V6",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"8765 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000106,https://example.com/1000106/,"2500 Cedar Hill Rd, Victoria, BC V8P 3Z4",67890,123456,Y,2,22,9,John Doe,john.doe@my.email,234-567-8901,,"2500 Cedar Hill Rd, Victoria, BC V8P 3Z4",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"5432 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000107,https://example.com/1000107/,"2600 Hillside Ave, Victoria, BC V8T 1Z4",67890,123456,Y,3,27,11,John Doe,john.doe@my.email,234-567-8901,,"2600 Hillside Ave, Victoria, BC V8T 1Z4",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"8765 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000108,https://example.com/1000108/,"2700 Cook St, Victoria, BC V8T 3R7",67890,123456,Y,1,12,5,John Doe,john.doe@my.email,234-567-8901,,"2700 Cook St, Victoria, BC V8T 3R7",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"5432 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000109,https://example.com/1000109/,"2800 Quadra St, Victoria, BC V8T 4E2",67890,123456,Y,2,20,8,John Doe,john.doe@my.email,234-567-8901,,"2800 Quadra St, Victoria, BC V8T 4E2",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"8765 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000110,https://example.com/1000110/,"2900 Burnside Rd, Victoria, BC V8T 5B4",67890,123456,Y,3,28,11,John Doe,john.doe@my.email,234-567-8901,,"2900 Burnside Rd, Victoria, BC V8T 5B4",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"5432 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000111,https://example.com/1000111/,"3000 Gorge Rd, Victoria, BC V9A 1M9",67890,123456,Y,1,10,4,John Doe,john.doe@my.email,234-567-8901,,"3000 Gorge Rd, Victoria, BC V9A 1M9",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"8765 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000112,https://example.com/1000112/,"3100 Tillicum Rd, Victoria, BC V9A 2A5",67890,123456,Y,2,22,9,John Doe,john.doe@my.email,234-567-8901,,"3100 Tillicum Rd, Victoria, BC V9A 2A5",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"5432 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000113,https://example.com/1000113/,"3200 Admirals Rd, Victoria, BC V9A 2P6",67890,123456,Y,3,27,11,John Doe,john.doe@my.email,234-567-8901,,"3200 Admirals Rd, Victoria, BC V9A 2P6",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"8765 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000114,https://example.com/1000114/,"3300 Harriet Rd, Victoria, BC V8Z 3S8",67890,123456,Y,1,12,5,John Doe,john.doe@my.email,234-567-8901,,"3300 Harriet Rd, Victoria, BC V8Z 3S8",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"5432 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000115,https://example.com/1000115/,"3400 Burnside Rd, Victoria, BC V8Z 3X2",67890,123456,Y,2,20,8,John Doe,john.doe@my.email,234-567-8901,,"3400 Burnside Rd, Victoria, BC V8Z 3X2",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"8765 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000116,https://example.com/1000116/,"3500 McKenzie Ave, Victoria, BC V8P 2M7",67890,123456,Y,3,28,11,John Doe,john.doe@my.email,234-567-8901,,"3500 McKenzie Ave, Victoria, BC V8P 2M7",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"5432 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000117,https://example.com/1000117/,"3600 Shelbourne St, Victoria, BC V8P 4H2",67890,123456,Y,1,10,4,John Doe,john.doe@my.email,234-567-8901,,"3600 Shelbourne St, Victoria, BC V8P 4H2",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"8765 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000118,https://example.com/1000118/,"3700 McRae Ave, Victoria, BC V8P 2G7",67890,123456,Y,2,22,9,John Doe,john.doe@my.email,234-567-8901,,"3700 McRae Ave, Victoria, BC V8P 2G7",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"5432 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000119,https://example.com/1000119/,"3800 Cedar Hill Rd, Victoria, BC V8P 3Z4",67890,123456,Y,3,27,11,John Doe,john.doe@my.email,234-567-8901,,"3800 Cedar Hill Rd, Victoria, BC V8P 3Z4",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"8765 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000120,https://example.com/1000120/,"3900 Richmond Rd, Victoria, BC V8R 4V6",67890,123456,Y,1,12,5,John Doe,john.doe@my.email,234-567-8901,,"3900 Richmond Rd, Victoria, BC V8R 4V6",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"5432 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, +2024-04,PLAT-EXP-VRBO,1000121,https://example.com/1000121/,"4000 Cedar Hill Cross Rd, Victoria, BC V8P 2N4",67890,123456,Y,2,20,8,John Doe,john.doe@my.email,234-567-8901,,"4000 Cedar Hill Cross Rd, Victoria, BC V8P 2N4",Jane Smith,jane.smith@my.email,456-789-0123,234-567-8902,"8765 Park Ave, Burnaby, BC V5H 2E8",123456789,,,,,,,,,,,,,,,,,,,,,,,, From a062074b274504bbbedc6d338f0a44e418bfbda3 Mon Sep 17 00:00:00 2001 From: Rick Anderson Date: Fri, 21 Jun 2024 17:05:14 -0700 Subject: [PATCH 6/9] working UploadListingDataPlatformUser including test DB cleanup --- .../Repositories/GenericRespository.cs | 11 +- .../UITest/DataBase/UnitOfWork/IUnitOfWork.cs | 2 + Test/UITest/DataBase/UnitOfWork/UnitOfWork.cs | 27 ++-- .../UnitOfWork/UserIdentityUnitOfWork.cs | 119 ------------------ .../UploadListingDataPlatformUser.feature | 6 +- .../UploadListingDataPlatformUser.feature.cs | 7 +- .../UploadListingDataPlatformUser.cs | 101 ++++++++++++++- .../SeleniumObjects/UIElement.cs | 5 +- .../WinFormsLibrary1/Controls/FileDialog.cs | 6 +- 9 files changed, 129 insertions(+), 155 deletions(-) delete mode 100644 Test/UITest/DataBase/UnitOfWork/UserIdentityUnitOfWork.cs diff --git a/Test/UITest/DataBase/Repositories/GenericRespository.cs b/Test/UITest/DataBase/Repositories/GenericRespository.cs index ea4e786d..93f0d0f2 100644 --- a/Test/UITest/DataBase/Repositories/GenericRespository.cs +++ b/Test/UITest/DataBase/Repositories/GenericRespository.cs @@ -95,14 +95,8 @@ public virtual TEntity GetByID(object id) return (result); } - ///TODO: Implement GetByName() - //public virtual TEntity GetByName(TEntity entity, string Name) - //{ - //} - public virtual TEntity Insert(TEntity entity) { - var foo = _DbSet.Add(entity); return (_DbSet.Add(entity).Entity); } @@ -114,8 +108,9 @@ public virtual void Delete(object id) public virtual void Delete(TEntity entityToDelete) { - if (_Context.Entry(entityToDelete).State == EntityState.Detached) - _DbSet.Attach(entityToDelete); + //Don't change state, just load entity + //if (_Context.Entry(entityToDelete).State == EntityState.Detached) + // _DbSet.Attach(entityToDelete); _DbSet.Remove(entityToDelete); } diff --git a/Test/UITest/DataBase/UnitOfWork/IUnitOfWork.cs b/Test/UITest/DataBase/UnitOfWork/IUnitOfWork.cs index 60442602..50764ce9 100644 --- a/Test/UITest/DataBase/UnitOfWork/IUnitOfWork.cs +++ b/Test/UITest/DataBase/UnitOfWork/IUnitOfWork.cs @@ -21,6 +21,8 @@ public interface IUnitOfWork GenericRepository DssUserIdentityViewRepository { get; } GenericRepository DssUserPrivilegeRepository { get; } GenericRepository DssUserRoleRepository { get; } + GenericRepository DssUploadDeliveryRepository { get; } + GenericRepository DssUploadLineRepository { get; } void Dispose(); void Save(); diff --git a/Test/UITest/DataBase/UnitOfWork/UnitOfWork.cs b/Test/UITest/DataBase/UnitOfWork/UnitOfWork.cs index 2aadf48e..de11df9d 100644 --- a/Test/UITest/DataBase/UnitOfWork/UnitOfWork.cs +++ b/Test/UITest/DataBase/UnitOfWork/UnitOfWork.cs @@ -14,18 +14,7 @@ public class UnitOfWork : IDisposable, IUnitOfWork DbContext _context; bool _disposed; - //public GenericRepository DssAccessRequestStatus { get; } - //public GenericRepository DssDbContext { get; } - //public GenericRepository DssEmailMessage { get; } - //public GenericRepository DssEmailMessageType { get; } - //public GenericRepository DssMessageReason { get; } - //public GenericRepository DssOrganization { get; } - //public GenericRepository DssOrganizationContactPerson { get; } - //public GenericRepository DssOrganizationType { get; } - //public GenericRepository DssUserIdentity { get; } - //public GenericRepository DssUserIdentityView { get; } - //public GenericRepository DssUserPrivilege { get; } - //GenericRepository DssUserRole { get; } + private readonly GenericRepository _DssAccessRequestStatusRepository; private readonly GenericRepository _DssEmailMessageRepository; @@ -37,7 +26,8 @@ public class UnitOfWork : IDisposable, IUnitOfWork private readonly GenericRepository _DssUserIdentityRepository; private readonly GenericRepository _DssUserIdentityViewRepository; private readonly GenericRepository _DssUserPrivilegeRepository; - //private readonly GenericRepository _DssMessageReasonRepository; + private readonly GenericRepository _DssUploadDeliveryRepository; + private readonly GenericRepository _DssUploadLineRepository; private readonly GenericRepository _DssUserRoleRepository; @@ -88,6 +78,17 @@ public GenericRepository DssUserIdentityViewRepository { get => _DssUserIdentityViewRepository ?? new GenericRepository(_context); } + + public GenericRepository DssUploadDeliveryRepository + { + get => _DssUploadDeliveryRepository ?? new GenericRepository(_context); + } + + public GenericRepository DssUploadLineRepository + { + get => _DssUploadLineRepository ?? new GenericRepository(_context); + } + public GenericRepository DssUserRoleRepository { get => _DssUserRoleRepository ?? new GenericRepository(_context); diff --git a/Test/UITest/DataBase/UnitOfWork/UserIdentityUnitOfWork.cs b/Test/UITest/DataBase/UnitOfWork/UserIdentityUnitOfWork.cs deleted file mode 100644 index a62553de..00000000 --- a/Test/UITest/DataBase/UnitOfWork/UserIdentityUnitOfWork.cs +++ /dev/null @@ -1,119 +0,0 @@ -using Microsoft.EntityFrameworkCore; -using DataBase.Repositories; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using DataBase.Entities; - -namespace DataBase.UnitOfWork -{ - public class UserIdentityUnitOfWork : IDisposable, IUnitOfWork - { - DbContext _context; - bool _disposed; - - private readonly GenericRepository _DssAccessRequestStatusRepository; - private readonly GenericRepository _DssEmailMessageRepository; - private readonly GenericRepository _DssEmailMessageTypeRepository; - private readonly GenericRepository _DssMessageReasonRepository; - private readonly GenericRepository _DssOrganizationRepository; - private readonly GenericRepository _DssOrganizationContactPersonRepository; - private readonly GenericRepository _DssOrganizationTypeRepository; - private readonly GenericRepository _DssUserIdentityRepository; - private readonly GenericRepository _DssUserIdentityViewRepository; - private readonly GenericRepository _DssUserPrivilegeRepository; - private readonly GenericRepository _DssUserRoleRepository; - - - public GenericRepository DssAccessRequestStatusRepository - { - get => _DssAccessRequestStatusRepository ?? new GenericRepository(_context); - } - - public GenericRepository DssEmailMessageRepository - { - get => _DssEmailMessageRepository ?? new GenericRepository(_context); - } - - public GenericRepository DssEmailMessageTypeRepository - { - get => _DssEmailMessageTypeRepository ?? new GenericRepository(_context); - } - - public GenericRepository DssMessageReasonRepository - { - get => _DssMessageReasonRepository ?? new GenericRepository(_context); - } - - public GenericRepository DssOrganizationRepository - { - get => _DssOrganizationRepository ?? new GenericRepository(_context); - } - - public GenericRepository DssOrganizationContactPersonRepository - { - get => _DssOrganizationContactPersonRepository ?? new GenericRepository(_context); - } - public GenericRepository DssOrganizationTypeRepository - { - get => _DssOrganizationTypeRepository ?? new GenericRepository(_context); - } - - public GenericRepository DssUserIdentityRepository - { - get => _DssUserIdentityRepository ?? new GenericRepository(_context); - } - - public GenericRepository DssUserPrivilegeRepository - { - get => _DssUserPrivilegeRepository ?? new GenericRepository(_context); - } - public GenericRepository DssUserIdentityViewRepository - { - get => _DssUserIdentityViewRepository ?? new GenericRepository(_context); - } - public GenericRepository DssUserRoleRepository - { - get => _DssUserRoleRepository ?? new GenericRepository(_context); - } - - - public UserIdentityUnitOfWork(DbContext context) - { - if (context != null) - { - _context = context; - } - } - - public DssUserIdentity? GetIdentity(string email) - { - if (null == email) - { - throw new ArgumentNullException("email"); - } - var identity = _DssUserIdentityRepository._DbSet.Where(p => p.EmailAddressDsc == email).FirstOrDefault(); - - return (identity); - } - public void Save() - { - _context.SaveChanges(); - } - - protected virtual void Dispose(bool disposing) - { - if (!_disposed && disposing) _context.Dispose(); - - _disposed = true; - } - - public void Dispose() - { - Dispose(true); - GC.SuppressFinalize(this); - } - } -} diff --git a/Test/UITest/SpecFlowProjectBDD/Features/UploadListingDataPlatformUser.feature b/Test/UITest/SpecFlowProjectBDD/Features/UploadListingDataPlatformUser.feature index 10e4c0a0..fe65a080 100644 --- a/Test/UITest/SpecFlowProjectBDD/Features/UploadListingDataPlatformUser.feature +++ b/Test/UITest/SpecFlowProjectBDD/Features/UploadListingDataPlatformUser.feature @@ -27,7 +27,7 @@ Scenario: UploadListingDataPlatformUser #Month Designation: - And I select which month the STR listing data is for + And I select which month the STR listing data is for "" #Validation rules @@ -73,8 +73,8 @@ Scenario: UploadListingDataPlatformUser Examples: - | UserName | UserType | Environment | UploadFile | ExpectedResult | - | STRDSSVrboDev | platform_staff | dev | C:\Users\RAnderson\Source\Repos\House-Policy-STRDSS\Test\UITest\TestData\listing files\listing-valid-2024-04.csv| pass | + | UserName | UserType | Environment | UploadFile | Month | ExpectedResult | + | STRDSSVrboDev | platform_staff | dev | C:\\Users\\RAnderson\\Source\\Repos\\House-Policy-STRDSS\\Test\\UITest\\TestData\\listing files\\listing-valid-2024-04.csv | April | pass | #| STRDSSAirbnbDev | platform_staff | dev | |pass | diff --git a/Test/UITest/SpecFlowProjectBDD/Features/UploadListingDataPlatformUser.feature.cs b/Test/UITest/SpecFlowProjectBDD/Features/UploadListingDataPlatformUser.feature.cs index 480f5871..0fd305d4 100644 --- a/Test/UITest/SpecFlowProjectBDD/Features/UploadListingDataPlatformUser.feature.cs +++ b/Test/UITest/SpecFlowProjectBDD/Features/UploadListingDataPlatformUser.feature.cs @@ -77,8 +77,8 @@ public void ScenarioCleanup() [NUnit.Framework.DescriptionAttribute("UploadListingDataPlatformUser")] [NUnit.Framework.CategoryAttribute("UploadListingData")] [NUnit.Framework.TestCaseAttribute("STRDSSVrboDev", "platform_staff", "dev", "C:\\Users\\RAnderson\\Source\\Repos\\House-Policy-STRDSS\\Test\\UITest\\TestData\\listing " + - "files\\listing-valid-2024-04.csv", "pass", null)] - public void UploadListingDataPlatformUser(string userName, string userType, string environment, string uploadFile, string expectedResult, string[] exampleTags) + "files\\listing-valid-2024-04.csv", "April", "pass", null)] + public void UploadListingDataPlatformUser(string userName, string userType, string environment, string uploadFile, string month, string expectedResult, string[] exampleTags) { string[] @__tags = new string[] { "UploadListingData"}; @@ -92,6 +92,7 @@ public void UploadListingDataPlatformUser(string userName, string userType, stri argumentsOfScenario.Add("UserType", userType); argumentsOfScenario.Add("Environment", environment); argumentsOfScenario.Add("UploadFile", uploadFile); + argumentsOfScenario.Add("Month", month); argumentsOfScenario.Add("ExpectedResult", expectedResult); TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("UploadListingDataPlatformUser", null, tagsOfScenario, argumentsOfScenario, featureTags); #line 5 @@ -127,7 +128,7 @@ public void UploadListingDataPlatformUser(string userName, string userType, stri testRunner.When(string.Format("I select a CSV file containing short-term listing data \"{0}\"", uploadFile), ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "When "); #line hidden #line 30 - testRunner.And("I select which month the STR listing data is for", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); + testRunner.And(string.Format("I select which month the STR listing data is for \"{0}\"", month), ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); #line hidden #line 40 testRunner.When("I initiate the upload", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "When "); diff --git a/Test/UITest/SpecFlowProjectBDD/StepDefinitions/UploadListingDataPlatformUser.cs b/Test/UITest/SpecFlowProjectBDD/StepDefinitions/UploadListingDataPlatformUser.cs index 474e77ad..431cc3bf 100644 --- a/Test/UITest/SpecFlowProjectBDD/StepDefinitions/UploadListingDataPlatformUser.cs +++ b/Test/UITest/SpecFlowProjectBDD/StepDefinitions/UploadListingDataPlatformUser.cs @@ -2,13 +2,17 @@ using NUnit.Framework.Legacy; using OpenQA.Selenium; using SpecFlowProjectBDD.Helpers; -using System; -using TechTalk.SpecFlow; +using DataBase.Entities; using TestFrameWork.Models; using UITest.PageObjects; using UITest.TestDriver; using TestFrameWork.WindowsAutomation.Controls; using static SpecFlowProjectBDD.SFEnums; +using Microsoft.EntityFrameworkCore; +using System.Text.RegularExpressions; +using System.Data; +using Npgsql; +using DataBase.UnitOfWork; namespace SpecFlowProjectBDD.StepDefinitions { @@ -29,6 +33,10 @@ public class UploadListingDataPlatformUser private SFEnums.UserTypeEnum _UserType; private SFEnums.LogonTypeEnum _LogonType; private BCIDPage _BCIDPage; + private DssDbContext _DssDBContext; + private DssUploadDelivery _DssUploadDelivery; + private DateTime _updateTime; + private IUnitOfWork _UnitOfWork; public UploadListingDataPlatformUser(SeleniumDriver Driver) { @@ -40,6 +48,9 @@ public UploadListingDataPlatformUser(SeleniumDriver Driver) _BCIDPage = new BCIDPage(_Driver); _UploadListingsPage = new UploadListingsPage(_Driver); _AppSettings = new AppSettings(); + DbContextOptions dbContextOptions = new DbContextOptions(); + _DssDBContext = new DssDbContext(dbContextOptions); + _UnitOfWork = new UnitOfWork(_DssDBContext); } @@ -121,19 +132,96 @@ public void WhenISelectACSVFileContainingShort_TermListingData(string UploadFile FileDialog fileDialog = new FileDialog(); fileDialog.FindAndSet(UploadFile, "Short-Term Rental Data Portal - Google Chrome", "Chrome_WidgetWin_1"); + _listingFile = UploadFile; + // Define a regular expression to match the year and month in the filename + string pattern = @"listing-valid-(\d{4})-(\d{2})\.csv"; + Regex regex = new Regex(pattern); + + // Match the regular expression with the filename + Match match = regex.Match(_listingFile); + + string yearMonth = string.Empty; + + if (match.Success) + { + // Extract the year and month from the match groups + string year = match.Groups[1].Value; + string month = match.Groups[2].Value; + yearMonth = $"{year}-{month}"; + } + else + { + throw new FormatException("The filename does not match the expected pattern."); + } + + var dt = DateOnly.Parse(yearMonth); + //var DSSUploadDeliverys = _DssDBContext.DssUploadDeliveries.Where(p => p.ReportPeriodYm == dt).ToList(); + var DSSUploadDeliverys = _UnitOfWork.DssUploadDeliveryRepository.Get(p => p.ReportPeriodYm == dt).ToList(); ; + + + foreach (var DSSLoadDelivery in DSSUploadDeliverys) + { + try + { + long id = DSSLoadDelivery.UploadDeliveryId; + _UnitOfWork.DssUploadDeliveryRepository.Delete(DSSLoadDelivery); + var DSSUploadDeliveryLines = _UnitOfWork.DssUploadLineRepository.Get(p => p.IncludingUploadDeliveryId == id); + foreach (var dSSDeliveryLine in DSSUploadDeliveryLines) + { + _UnitOfWork.DssUploadLineRepository.Delete(dSSDeliveryLine.UploadLineId); + } + _UnitOfWork.Save(); + } + + catch(NpgsqlOperationInProgressException ex) + { + //should not happen, but continue if it does for now + } + } } - [When(@"I select which month the STR listing data is for")] - public void WhenISelectWhichMonthTheSTRListingDataIsFor() + [When(@"I select which month the STR listing data is for ""([^""]*)""")] + public void WhenISelectWhichMonthTheSTRListingDataIsFor(string Month) { _UploadListingsPage.ReportingMonthDropDown.Click(); - _UploadListingsPage.ReportingMonthDropDown.ExecuteJavaScript(@"document.querySelector(""#month_0"").click()"); + + string listboxItems = _UploadListingsPage.ReportingMonthDropDown.ExecuteJavaScript(@"return document.querySelector(""#month_list"").children.length").ToString(); + + int count = 0; + + if (int.TryParse(listboxItems, out count) == false) + { + throw new ArgumentException("Value returned for ListBox Item count is not an int"); + } + + int index = 0; + string script = string.Empty; + + for (int i = 0; i < count; i++) + { + //script = $@"document.querySelector(""#month_{i} > span"");"; + script = "document.querySelector('#month_" + i + "');"; + + string result = _UploadListingsPage.ReportingMonthDropDown.ExecuteJavaScript(script) == null ? string.Empty: _UploadListingsPage.ReportingMonthDropDown.ExecuteJavaScript(script).ToString(); + + if (result.ToUpper().Contains(Month.ToUpper())) + { + index = i; + break; + } + } + + //_UploadListingsPage.ReportingMonthDropDown.ExecuteJavaScript(@"document.querySelector(""#month_0 > span"").click()"); + //script = $@"document.querySelector(""#month_{index}"").click();"; + script = "document.querySelector('#month_1').click();"; + _UploadListingsPage.ReportingMonthDropDown.ExecuteJavaScript(script); } [When(@"I initiate the upload")] public void WhenInitiateTheUpload() { + _updateTime = DateTime.UtcNow; _UploadListingsPage.UploadButton.Click(); } @@ -158,7 +246,8 @@ public void ThenIShouldSeeASuccessMessage() [Then(@"a new entry on an upload log with a timestamp, username, and the number of records created\.")] public void ThenANewEntryOnAnUploadLogWithATimestampUsernameAndTheNumberOfRecordsCreated_() { - //throw new PendingStepException(); + var updateTime = _UnitOfWork.DssUploadDeliveryRepository.Get(p => p.UpdDtm >= _updateTime); + ClassicAssert.IsNotNull(updateTime); } [When(@"the data import is not successful")] diff --git a/Test/UITest/TestFrameWork/SeleniumObjects/UIElement.cs b/Test/UITest/TestFrameWork/SeleniumObjects/UIElement.cs index 0e93388c..ba107edf 100644 --- a/Test/UITest/TestFrameWork/SeleniumObjects/UIElement.cs +++ b/Test/UITest/TestFrameWork/SeleniumObjects/UIElement.cs @@ -69,14 +69,15 @@ public bool FindElement(Enums.FINDBY By, string Locator) return (true); } - public bool ExecuteJavaScript(string JavaScript) + public object ExecuteJavaScript(string JavaScript) { if (null == _Driver) throw new ArgumentNullException("No driver defined"); else { IJavaScriptExecutor js = _Driver.Driver as IJavaScriptExecutor; - js.ExecuteScript(JavaScript); + var result = js.ExecuteScript(JavaScript); + return (result); } return (true); diff --git a/Test/UITest/WinFormsLibrary1/Controls/FileDialog.cs b/Test/UITest/WinFormsLibrary1/Controls/FileDialog.cs index bb1c2c40..ad198cbe 100644 --- a/Test/UITest/WinFormsLibrary1/Controls/FileDialog.cs +++ b/Test/UITest/WinFormsLibrary1/Controls/FileDialog.cs @@ -43,10 +43,14 @@ public void FindAndSet(string FileName, string WindowName, string ClassName) IUIAutomationCondition openButtonNameCondition = automation.CreatePropertyCondition(UIA_PropertyIds.UIA_NamePropertyId, "Open"); IUIAutomationCondition openButtonClassCondition = automation.CreatePropertyCondition(UIA_PropertyIds.UIA_ClassNamePropertyId, "Button"); - IUIAutomationCondition openButtonCombinedCondition = automation.CreateAndCondition(openButtonNameCondition, openButtonClassCondition); + IUIAutomationCondition automationIDCondition = automation.CreatePropertyCondition(UIA_PropertyIds.UIA_AutomationIdPropertyId, "1"); + IUIAutomationCondition openButtonCombinedCondition = automation.CreateAndCondition(openButtonNameCondition, automationIDCondition); + Thread.Sleep(2000); IUIAutomationElement openButton = fileDialog.FindFirst(TreeScope.TreeScope_Descendants, openButtonCombinedCondition); + openButton.SetFocus(); + if (openButton != null) { Thread.Sleep(2000); From 2b647f7e00f350897f68beb195a110383e1e3536 Mon Sep 17 00:00:00 2001 From: Rick Anderson Date: Thu, 18 Jul 2024 16:16:17 -0700 Subject: [PATCH 7/9] Removed hard coded connectionstr in DbContext, Adding error handling for failed login --- Test/UITest/DataBase/Entities/DssDbContext.cs | 4 ---- .../DataBase/Entities/DssDbContextPartial.cs | 23 +++++++++++++++++++ .../SpecFlowProjectBDD/Helpers/AuthHelper.cs | 9 ++++++-- Test/UITest/SpecFlowProjectBDD/SFEnums.cs | 1 + .../StepDefinitions/STRDSSLandingPage.cs | 3 +-- .../StepDefinitions/TermsAndConditions.cs | 12 ++++++---- .../UploadListingDataPlatformUser.cs | 3 +-- 7 files changed, 41 insertions(+), 14 deletions(-) create mode 100644 Test/UITest/DataBase/Entities/DssDbContextPartial.cs diff --git a/Test/UITest/DataBase/Entities/DssDbContext.cs b/Test/UITest/DataBase/Entities/DssDbContext.cs index 6c7feadc..254734a1 100644 --- a/Test/UITest/DataBase/Entities/DssDbContext.cs +++ b/Test/UITest/DataBase/Entities/DssDbContext.cs @@ -51,10 +51,6 @@ public DssDbContext(DbContextOptions options) public virtual DbSet DssUserRoles { get; set; } - protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) -#warning To protect potentially sensitive information in your connection string, you should move it out of source code. You can avoid scaffolding the connection string by using the Name= syntax to read it from configuration - see https://go.microsoft.com/fwlink/?linkid=2131148. For more guidance on storing connection strings, see http://go.microsoft.com/fwlink/?LinkId=723263. - => optionsBuilder.UseNpgsql("Host=localhost;Database=strdssdev;Username=strdssdev;Password=test@123"); - protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.HasPostgresExtension("postgis"); diff --git a/Test/UITest/DataBase/Entities/DssDbContextPartial.cs b/Test/UITest/DataBase/Entities/DssDbContextPartial.cs new file mode 100644 index 00000000..afd1ec6a --- /dev/null +++ b/Test/UITest/DataBase/Entities/DssDbContextPartial.cs @@ -0,0 +1,23 @@ +using Microsoft.EntityFrameworkCore; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace DataBase.Entities +{ + public partial class DssDbContext : DbContext + { + private string _ConnectionString = string.Empty; + + public DssDbContext(DbContextOptions options, string ConnectionString) : base(options) + { + _ConnectionString = ConnectionString; + } + + protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) + => optionsBuilder.UseNpgsql(_ConnectionString); + + } +} diff --git a/Test/UITest/SpecFlowProjectBDD/Helpers/AuthHelper.cs b/Test/UITest/SpecFlowProjectBDD/Helpers/AuthHelper.cs index 6ae58554..0bacbd7e 100644 --- a/Test/UITest/SpecFlowProjectBDD/Helpers/AuthHelper.cs +++ b/Test/UITest/SpecFlowProjectBDD/Helpers/AuthHelper.cs @@ -20,7 +20,7 @@ public class AuthHelper private string _TestUserName; private string _TestPassword; private AppSettings _AppSettings; - private LogonTypeEnum _LogonType; + private LogonTypeEnum? _LogonType; private BCIDPage _BCIDPage; public AuthHelper(IDriver Driver) @@ -55,7 +55,7 @@ public LogonTypeEnum SetLogonType(UserTypeEnum UserType) return (_LogonType); } - public LogonTypeEnum Authenticate(string UserName, UserTypeEnum UserType) + public LogonTypeEnum? Authenticate(string UserName, UserTypeEnum UserType) { _TestUserName = UserName; _TestPassword = _AppSettings.GetUser(_TestUserName) ?? string.Empty; @@ -86,6 +86,11 @@ public LogonTypeEnum Authenticate(string UserName, UserTypeEnum UserType) } } + if (_Driver.Url.ToLower().Contains("logon.cgi")) + { + _LogonType = null; + } + return (_LogonType); } } diff --git a/Test/UITest/SpecFlowProjectBDD/SFEnums.cs b/Test/UITest/SpecFlowProjectBDD/SFEnums.cs index 57e54b3d..a00db585 100644 --- a/Test/UITest/SpecFlowProjectBDD/SFEnums.cs +++ b/Test/UITest/SpecFlowProjectBDD/SFEnums.cs @@ -10,5 +10,6 @@ public static class SFEnums { public enum UserTypeEnum { CEUSTAFF, CEUADMIN, LOCALGOVERNMENT, BCGOVERNMENTSTAFF, SHORTTERMRENTALPLATFORM } public enum LogonTypeEnum { IDIR, BCID } + public enum Environment { LOCAL,DEV,TEST,UAT,PROD} } } diff --git a/Test/UITest/SpecFlowProjectBDD/StepDefinitions/STRDSSLandingPage.cs b/Test/UITest/SpecFlowProjectBDD/StepDefinitions/STRDSSLandingPage.cs index 59472799..1d2e86bf 100644 --- a/Test/UITest/SpecFlowProjectBDD/StepDefinitions/STRDSSLandingPage.cs +++ b/Test/UITest/SpecFlowProjectBDD/StepDefinitions/STRDSSLandingPage.cs @@ -25,7 +25,6 @@ public sealed class STRDSSLandingPage private bool _ExpectedResult = false; private AppSettings _AppSettings; private SFEnums.UserTypeEnum _UserType; - private SFEnums.LogonTypeEnum _LogonType; private BCIDPage _BCIDPage; public STRDSSLandingPage(SeleniumDriver Driver) @@ -58,7 +57,7 @@ public void GivenIAmAauthenticatedLGStaffMemberUser(string UserName, string Expe _UserType = userHelper.SetUserType(UserType); //Authenticate user using IDir or BCID depending on the user - _LogonType = authHelper.Authenticate(UserName, _UserType); + authHelper.Authenticate(UserName, _UserType); IWebElement TOC = null; diff --git a/Test/UITest/SpecFlowProjectBDD/StepDefinitions/TermsAndConditions.cs b/Test/UITest/SpecFlowProjectBDD/StepDefinitions/TermsAndConditions.cs index 4c0712fc..6cd0e6fc 100644 --- a/Test/UITest/SpecFlowProjectBDD/StepDefinitions/TermsAndConditions.cs +++ b/Test/UITest/SpecFlowProjectBDD/StepDefinitions/TermsAndConditions.cs @@ -28,12 +28,13 @@ public sealed class TermsAndConditions private string _TestEmail; private string _TestUserType; private SFEnums.UserTypeEnum _UserType; - private SFEnums.LogonTypeEnum _LogonType; + private SFEnums.LogonTypeEnum? _LogonType; private bool _ExpectedResult = false; private AppSettings _AppSettings; private DssDbContext _DssDBContext; private DssUserIdentity _UserIdentity; private DssUserIdentity _OriginalUserIdentity; + private SFEnums.Environment _Environment = SFEnums.Environment.LOCAL; public TermsAndConditions(SeleniumDriver Driver) { @@ -45,11 +46,13 @@ public TermsAndConditions(SeleniumDriver Driver) _AppSettings = new AppSettings(); } - [SetUp] + [BeforeScenario] public void TestSetUp() { - DbContextOptions dbContextOptions = new DbContextOptions(); - _DssDBContext = new DssDbContext(dbContextOptions); + string dbConnectionString = _AppSettings.GetConnectionString(_Environment.ToString().ToLower()) ?? string.Empty; + DbContextOptions dbContextOptions = new DbContextOptions(); + + _DssDBContext = new DssDbContext(dbContextOptions, dbConnectionString); } [Given(@"User ""(.*)"" is enabled, approved, has the correct roles ""(.*)"", but has not accepted TOC")] @@ -112,6 +115,7 @@ public void ILogInOrAccessTheSystem() //Authenticate user using IDir or BCID depending on the user _LogonType = authHelper.Authenticate(_TestUserName, _UserType); + ClassicAssert.IsNotNull(_LogonType, "Logon FAILED"); //TODO: Validate that the login was sucessfull } diff --git a/Test/UITest/SpecFlowProjectBDD/StepDefinitions/UploadListingDataPlatformUser.cs b/Test/UITest/SpecFlowProjectBDD/StepDefinitions/UploadListingDataPlatformUser.cs index 431cc3bf..72d1361a 100644 --- a/Test/UITest/SpecFlowProjectBDD/StepDefinitions/UploadListingDataPlatformUser.cs +++ b/Test/UITest/SpecFlowProjectBDD/StepDefinitions/UploadListingDataPlatformUser.cs @@ -31,7 +31,6 @@ public class UploadListingDataPlatformUser private bool _ExpectedResult = false; private AppSettings _AppSettings; private SFEnums.UserTypeEnum _UserType; - private SFEnums.LogonTypeEnum _LogonType; private BCIDPage _BCIDPage; private DssDbContext _DssDBContext; private DssUploadDelivery _DssUploadDelivery; @@ -71,7 +70,7 @@ public void GivenIAmAnAuthenticatedPlatformRepresentativeWithTheNecessaryPermiss _UserType = userHelper.SetUserType(UserType); //Authenticate user using IDir or BCID depending on the user - _LogonType = authHelper.Authenticate(UserName, _UserType); + authHelper.Authenticate(UserName, _UserType); } [When(@"I access the Data Sharing System")] From 99e40979549585a9803501d672655eadfe3584c1 Mon Sep 17 00:00:00 2001 From: Rick Anderson Date: Wed, 24 Jul 2024 11:41:16 -0700 Subject: [PATCH 8/9] Created work around for Selenium ExecuteJavaScript which no longer returns a value. Broken tests are working. Also updated two scenarios to use AppSettings connection string --- .../SpecFlowProjectBDD.csproj | 2 +- .../StepDefinitions/DenyAccessToSystem.cs | 22 +++--- .../StepDefinitions/ManagingAccess.cs | 77 ++++++++++++------- .../StepDefinitions/STRDSSLandingPage.cs | 2 +- .../SendNoticeOfTakedownWithoutADSSlisting.cs | 4 +- .../SendTakeDownRequestWithoutADSSListing.cs | 4 +- .../StepDefinitions/TermsAndConditions.cs | 2 +- .../UploadListingDataPlatformUser.cs | 14 ++-- .../SeleniumObjects/JavaScript.cs | 18 ----- .../SeleniumObjects/UIElement.cs | 54 ++++++++++--- 10 files changed, 122 insertions(+), 77 deletions(-) delete mode 100644 Test/UITest/TestFrameWork/SeleniumObjects/JavaScript.cs diff --git a/Test/UITest/SpecFlowProjectBDD/SpecFlowProjectBDD.csproj b/Test/UITest/SpecFlowProjectBDD/SpecFlowProjectBDD.csproj index 0be5a84b..fcd0a687 100644 --- a/Test/UITest/SpecFlowProjectBDD/SpecFlowProjectBDD.csproj +++ b/Test/UITest/SpecFlowProjectBDD/SpecFlowProjectBDD.csproj @@ -14,7 +14,7 @@ - + diff --git a/Test/UITest/SpecFlowProjectBDD/StepDefinitions/DenyAccessToSystem.cs b/Test/UITest/SpecFlowProjectBDD/StepDefinitions/DenyAccessToSystem.cs index 8c071474..af9af5b0 100644 --- a/Test/UITest/SpecFlowProjectBDD/StepDefinitions/DenyAccessToSystem.cs +++ b/Test/UITest/SpecFlowProjectBDD/StepDefinitions/DenyAccessToSystem.cs @@ -1,6 +1,8 @@ using Configuration; using DataBase.Entities; +using DataBase.UnitOfWork; using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; using Newtonsoft.Json; using NUnit.Framework; using NUnit.Framework.Legacy; @@ -30,14 +32,8 @@ public sealed class DenyAccessToSystem private DssUserIdentity _UserIdentity; private bool _OriginalEnabledValue; AppSettings _AppSettings; - - - [BeforeScenario] - public void TestSetup() - { - DbContextOptions dbContextOptions = new DbContextOptions(); - _DssDBContext = new DssDbContext(dbContextOptions); - } + private IUnitOfWork _UnitOfWork; + private SFEnums.Environment _Environment = SFEnums.Environment.LOCAL; public DenyAccessToSystem(SeleniumDriver Driver) @@ -48,6 +44,13 @@ public DenyAccessToSystem(SeleniumDriver Driver) _IDirPage = new IDirLoginPage(_Driver); _AppSettings = new AppSettings(); + + DbContextOptions dbContextOptions = new DbContextOptions(); + + string dbConnectionString = _AppSettings.GetConnectionString(_Environment.ToString().ToLower()) ?? string.Empty; + + _DssDBContext = new DssDbContext(dbContextOptions, dbConnectionString); + _UnitOfWork = new UnitOfWork(_DssDBContext); } //User Authentication @@ -58,11 +61,8 @@ public void GivenIAmAauthenticatedGovernmentUser(string ExpectedResult) _Driver.Url = _AppSettings.GetServer("default"); _Driver.Navigate(); - - //_PathFinderPage.IDRButton.Click(); } - //I attempt to access the Data Sharing System as "" with email "" and RoleName "" //[When(@"I attempt to access the Data Sharing System as ""(.*)"" with email ""(.*)"" and Role ""(.*)""")] [When(@"I attempt to access the Data Sharing System as ""(.*)"" with email ""(.*)"" and Role ""(.*)""")] public void IAttemptToAccessTheDataSharingSystem(string UserName, string Email, string RoleName) diff --git a/Test/UITest/SpecFlowProjectBDD/StepDefinitions/ManagingAccess.cs b/Test/UITest/SpecFlowProjectBDD/StepDefinitions/ManagingAccess.cs index 1239d237..37859d6d 100644 --- a/Test/UITest/SpecFlowProjectBDD/StepDefinitions/ManagingAccess.cs +++ b/Test/UITest/SpecFlowProjectBDD/StepDefinitions/ManagingAccess.cs @@ -73,7 +73,7 @@ public void GivenIAmAauthenticatedGovernmentUser(string UserName, string Expecte if ((null != TOC) && (TOC.Displayed)) { //Nested Angular controls obscure the TermsAndConditionsCheckbox. Need JS - _TermsAndConditionsPage.TermsAndConditionsCheckBox.ExecuteJavaScript(@"document.querySelector(""body > app-root > app-layout > div.content > app-terms-and-conditions > p-card > div > div.p-card-body > div > div > div.checkbox-container > p-checkbox > div > div.p-checkbox-box"").click()"); + _TermsAndConditionsPage.TermsAndConditionsCheckBox.JSExecuteJavaScript(@"document.querySelector(""body > app-root > app-layout > div.content > app-terms-and-conditions > p-card > div > div.p-card-body > div > div > div.checkbox-container > p-checkbox > div > div.p-checkbox-box"").click()"); _TermsAndConditionsPage.ContinueButton.Click(); } } @@ -88,10 +88,14 @@ public void IAccessTheAdministrativeInterfaceOfTheSystem() [Then("There should be a dedicated section for managing user access requests")] public void ThereShouldBeADedicatedSectionForManagingUserAccessRequests() { - bool result = (bool)_ManagingAccessPage.ManageAccessSection.ExecuteJavaScript(@"document.querySelector(""body > app-root > app-layout > div.content > app-user-management > div.table-card-container"").checkVisibility()"); + string selector = "body > app-root > app-layout > div.content > app-user-management > div.table-card-container"; + + bool result = (bool)_ManagingAccessPage.ManageAccessSection.JSCheckVisability(selector); + ClassicAssert.IsTrue(result); } + //#User Access Request List @@ -103,33 +107,54 @@ public void INavigateToTheUserAccessRequestSection() [Then("I should see a list displaying all user access requests, including relevant details such as the user's name, role request, and date of submission")] public void IShouldSeeAListDisplayingAllUserAccessRequestss() { - bool found = false; bool result = false; + string selector = "#pn_id_14-table"; + result = (bool)_ManagingAccessPage.ManageAccessSection.JSCheckVisability(selector); ; + //result = (bool)_ManagingAccessPage.ManageAccessSection.ExecuteJavaScript(@"document.querySelector(""#pn_id_14-table"").checkVisibility()"); + ClassicAssert.IsTrue(result); - while (found == false) - { - //wait for element to become visable - try - { - result = (bool)_ManagingAccessPage.ManageAccessSection.ExecuteJavaScript(@"document.querySelector(""#pn_id_12-table"").checkVisibility()"); - found = true; - } - catch (JavaScriptException ex) - { - System.Threading.Thread.Sleep(1000); - } - - } - - result = (bool)_ManagingAccessPage.ManageAccessSection.ExecuteJavaScript(@"document.querySelector(""#pn_id_12-table > tbody"").checkVisibility()"); + selector = "#pn_id_14-table > tbody"; + result = (bool)_ManagingAccessPage.ManageAccessSection.JSCheckVisability(selector); + //result = (bool)_ManagingAccessPage.ManageAccessSection.ExecuteJavaScript(@"document.querySelector(""#pn_id_14-table > tbody"").checkVisibility()"); ClassicAssert.IsTrue(result); - result = (bool)_ManagingAccessPage.ManageAccessSection.ExecuteJavaScript(@"document.querySelector(""#pn_id_12-table > thead > tr > th:nth-child(3)"").textContent.toLowerCase().trim() === ""first name"""); + + selector = "#pn_id_14-table > thead > tr > th:nth-child(3)"; + + IJavaScriptExecutor js = _Driver.Driver as IJavaScriptExecutor; + var script = @" + try { + var elem = document.querySelector('" + selector + @"'); + console.log('Element:', elem); + + if (elem) { + console.log('Element found'); + if (elem.textContent.toLowerCase().trim() === 'first name') { + return(true); + } else { + console.error('FirstName Not Found'); + return false; + } + } else { + console.error('Element not found'); + return false; + } + } catch (e) { + console.error('Error:', e); + return false; + }"; + + result = (bool)_ManagingAccessPage.ManageAccessSection.JSExecuteJavaScript(@"document.querySelector(""#pn_id_14-table > thead > tr > th:nth-child(3)"").textContent.toLowerCase().trim() === ""first name"""); + + //result = (bool)_ManagingAccessPage.ManageAccessSection.JSExecuteJavaScript(script); ClassicAssert.IsTrue(result); - result = (bool)_ManagingAccessPage.ManageAccessSection.ExecuteJavaScript(@"document.querySelector(""#pn_id_12-table > thead > tr > th:nth-child(4)"").textContent.toLowerCase().trim() === ""last name"""); + + result = (bool)_ManagingAccessPage.ManageAccessSection.JSExecuteJavaScript(@"document.querySelector('#pn_id_14-table > thead > tr > th:nth-child(4)').textContent.toLowerCase().trim() === 'last name'"); ClassicAssert.IsTrue(result); - result = (bool)_ManagingAccessPage.ManageAccessSection.ExecuteJavaScript(@"document.querySelector(""#pn_id_12-table > thead > tr > th:nth-child(7)"").textContent.toLowerCase().trim() === ""organization"""); + + result = (bool)_ManagingAccessPage.ManageAccessSection.JSExecuteJavaScript(@"document.querySelector(""#pn_id_14-table > thead > tr > th:nth-child(7)"").textContent.toLowerCase().trim() === ""organization"""); ClassicAssert.IsTrue(result); - result = (bool)_ManagingAccessPage.ManageAccessSection.ExecuteJavaScript(@"document.querySelector(""#pn_id_12-table > thead > tr > th:nth-child(6)"").textContent.toLowerCase().trim() === ""email address"""); + + result = (bool)_ManagingAccessPage.ManageAccessSection.JSExecuteJavaScript(@"document.querySelector(""#pn_id_14-table > thead > tr > th:nth-child(6)"").textContent.toLowerCase().trim() === ""email address"""); ClassicAssert.IsTrue(result); } @@ -143,7 +168,7 @@ public void ReviewingASpecificAccessRequest() [Then("I should be able to view detailed information provided by the user, including their role request and any justifications or additional comments")] public void ShouldBeAbleToViewDetailedInformationProvidedByTheUser() { - bool result = (bool)_ManagingAccessPage.ManageAccessSection.ExecuteJavaScript(@"document.querySelector(""#pn_id_12-table > tbody > tr:nth-child(1)"").checkVisibility()"); + bool result = (bool)_ManagingAccessPage.ManageAccessSection.JSExecuteJavaScript(@"document.querySelector(""#pn_id_14-table > tbody > tr:nth-child(1)"").checkVisibility()"); ClassicAssert.IsTrue(result); } @@ -156,7 +181,7 @@ public void ReviewingAnAccessRequest() [Then("There should be a Grant Access button allowing me to approve the user's request")] public void ThereShouldBeAGrantAccessButton() { - bool result = (bool)_ManagingAccessPage.ManageAccessSection.ExecuteJavaScript(@"document.querySelector(""#pn_id_12-table > tbody > tr:nth-child(1) > td:nth-child(9) > span > p-inputswitch > div"").checkVisibility()"); + bool result = (bool)_ManagingAccessPage.ManageAccessSection.JSExecuteJavaScript(@"document.querySelector(""#pn_id_14-table > tbody > tr:nth-child(1) > td:nth-child(9) > span > p-inputswitch > div"").checkVisibility()"); ClassicAssert.IsTrue(result); } @@ -192,7 +217,7 @@ public void ReviewingAnAccessRequestThatHasBeenGranted() [Then("There should be a Remove Access option allowing me to remove the user's access if it is deemed inappropriate or unnecessary")] public void ThereShouldBeARemoveAccessOption() { - bool result = (bool)_ManagingAccessPage.ManageAccessSection.ExecuteJavaScript(@"document.querySelector(""#pn_id_12-table > tbody > tr:nth-child(1) > td:nth-child(9) > span > p-inputswitch > div"").checkVisibility()"); + bool result = (bool)_ManagingAccessPage.ManageAccessSection.JSExecuteJavaScript(@"document.querySelector(""#pn_id_14-table > tbody > tr:nth-child(1) > td:nth-child(9) > span > p-inputswitch > div"").checkVisibility()"); ClassicAssert.IsTrue(result); } diff --git a/Test/UITest/SpecFlowProjectBDD/StepDefinitions/STRDSSLandingPage.cs b/Test/UITest/SpecFlowProjectBDD/StepDefinitions/STRDSSLandingPage.cs index 1d2e86bf..ac7c149a 100644 --- a/Test/UITest/SpecFlowProjectBDD/StepDefinitions/STRDSSLandingPage.cs +++ b/Test/UITest/SpecFlowProjectBDD/StepDefinitions/STRDSSLandingPage.cs @@ -74,7 +74,7 @@ public void GivenIAmAauthenticatedLGStaffMemberUser(string UserName, string Expe if ((null != TOC) && (TOC.Displayed)) { //Nested Angular controls obscure the TermsAndConditionsCheckbox. Need JS - _TermsAndConditionsPage.TermsAndConditionsCheckBox.ExecuteJavaScript(@"document.querySelector(""body > app-root > app-layout > div.content > app-terms-and-conditions > p-card > div > div.p-card-body > div > div > div.checkbox-container > p-checkbox > div > div.p-checkbox-box"").click()"); + _TermsAndConditionsPage.TermsAndConditionsCheckBox.JSExecuteJavaScript(@"document.querySelector(""body > app-root > app-layout > div.content > app-terms-and-conditions > p-card > div > div.p-card-body > div > div > div.checkbox-container > p-checkbox > div > div.p-checkbox-box"").click()"); _TermsAndConditionsPage.ContinueButton.Click(); } } diff --git a/Test/UITest/SpecFlowProjectBDD/StepDefinitions/SendNoticeOfTakedownWithoutADSSlisting.cs b/Test/UITest/SpecFlowProjectBDD/StepDefinitions/SendNoticeOfTakedownWithoutADSSlisting.cs index 948d6668..e643da51 100644 --- a/Test/UITest/SpecFlowProjectBDD/StepDefinitions/SendNoticeOfTakedownWithoutADSSlisting.cs +++ b/Test/UITest/SpecFlowProjectBDD/StepDefinitions/SendNoticeOfTakedownWithoutADSSlisting.cs @@ -69,7 +69,7 @@ public void GivenIAmAauthenticatedLGStaffMemberUser(string UserName, string Expe if ((null != TOC) && (TOC.Displayed)) { //Nested Angular controls obscure the TermsAndConditionsCheckbox. Need JS - _TermsAndConditionsPage.TermsAndConditionsCheckBox.ExecuteJavaScript(@"document.querySelector(""body > app-root > app-layout > div.content > app-terms-and-conditions > p-card > div > div.p-card-body > div > div > div.checkbox-container > p-checkbox > div > div.p-checkbox-box"").click()"); + _TermsAndConditionsPage.TermsAndConditionsCheckBox.JSExecuteJavaScript(@"document.querySelector(""body > app-root > app-layout > div.content > app-terms-and-conditions > p-card > div > div.p-card-body > div > div > div.checkbox-container > p-checkbox > div > div.p-checkbox-box"").click()"); _TermsAndConditionsPage.ContinueButton.Click(); } } @@ -144,7 +144,7 @@ public void WhenEnteringTheOptionalHostEmailAddress() public void TheSystemShouldPresentAListOfAvailablePlatformOption() { _DelistingWarningPage.PlatformReceipientDropdown.WaitFor(); - _DelistingWarningPage.PlatformReceipientDropdown.ExecuteJavaScript(@"document.querySelector(""#platformId_0"").click()"); + _DelistingWarningPage.PlatformReceipientDropdown.JSExecuteJavaScript(@"document.querySelector(""#platformId_0"").click()"); ClassicAssert.IsTrue(_DelistingWarningPage.PlatformReceipientDropdown.Text.ToUpper().Contains("TEST AIRBNB")); } diff --git a/Test/UITest/SpecFlowProjectBDD/StepDefinitions/SendTakeDownRequestWithoutADSSListing.cs b/Test/UITest/SpecFlowProjectBDD/StepDefinitions/SendTakeDownRequestWithoutADSSListing.cs index a0f574b7..ffa473e2 100644 --- a/Test/UITest/SpecFlowProjectBDD/StepDefinitions/SendTakeDownRequestWithoutADSSListing.cs +++ b/Test/UITest/SpecFlowProjectBDD/StepDefinitions/SendTakeDownRequestWithoutADSSListing.cs @@ -70,7 +70,7 @@ public void GivenIAmAauthenticatedLGStaffMemberUser(string UserName, string Expe if ((null != TOC) && (TOC.Displayed)) { //Nested Angular controls obscure the TermsAndConditionsCheckbox. Need JS - _TermsAndConditionsPage.TermsAndConditionsCheckBox.ExecuteJavaScript(@"document.querySelector(""body > app-root > app-layout > div.content > app-terms-and-conditions > p-card > div > div.p-card-body > div > div > div.checkbox-container > p-checkbox > div > div.p-checkbox-box"").click()"); + _TermsAndConditionsPage.TermsAndConditionsCheckBox.JSExecuteJavaScript(@"document.querySelector(""body > app-root > app-layout > div.content > app-terms-and-conditions > p-card > div > div.p-card-body > div > div > div.checkbox-container > p-checkbox > div > div.p-checkbox-box"").click()"); _TermsAndConditionsPage.ContinueButton.Click(); } } @@ -152,7 +152,7 @@ public void TheSystemShouldValidateTheURLFormat() public void WhenSelectingThePlatform() { _DelistingRequestPage.PlatformReceipientDropdown.Click(); - _DelistingRequestPage.PlatformReceipientDropdown.ExecuteJavaScript(@"document.querySelector(""#platformId_0"").click()"); + _DelistingRequestPage.PlatformReceipientDropdown.JSExecuteJavaScript(@"document.querySelector(""#platformId_0"").click()"); ClassicAssert.IsTrue(_DelistingRequestPage.PlatformReceipientDropdown.Text.ToUpper().Contains("TEST AIRBNB")); } diff --git a/Test/UITest/SpecFlowProjectBDD/StepDefinitions/TermsAndConditions.cs b/Test/UITest/SpecFlowProjectBDD/StepDefinitions/TermsAndConditions.cs index 6cd0e6fc..493387be 100644 --- a/Test/UITest/SpecFlowProjectBDD/StepDefinitions/TermsAndConditions.cs +++ b/Test/UITest/SpecFlowProjectBDD/StepDefinitions/TermsAndConditions.cs @@ -143,7 +143,7 @@ public void ThenIShouldBePromptedToAcceptTheTermsAndConditions() if ((null != TOC) && (TOC.Displayed)) { //Nested Angular controls obscure the TermsAndConditionsCheckbox. Need JS - _TermsAndConditionsPage.TermsAndConditionsCheckBox.ExecuteJavaScript(@"document.querySelector(""body > app-root > app-layout > div.content > app-terms-and-conditions > p-card > div > div.p-card-body > div > div > div.checkbox-container > p-checkbox > div > div.p-checkbox-box"").click()"); + _TermsAndConditionsPage.TermsAndConditionsCheckBox.JSExecuteJavaScript(@"document.querySelector(""body > app-root > app-layout > div.content > app-terms-and-conditions > p-card > div > div.p-card-body > div > div > div.checkbox-container > p-checkbox > div > div.p-checkbox-box"").click()"); _TermsAndConditionsPage.ContinueButton.Click(); } } diff --git a/Test/UITest/SpecFlowProjectBDD/StepDefinitions/UploadListingDataPlatformUser.cs b/Test/UITest/SpecFlowProjectBDD/StepDefinitions/UploadListingDataPlatformUser.cs index 72d1361a..8177eaef 100644 --- a/Test/UITest/SpecFlowProjectBDD/StepDefinitions/UploadListingDataPlatformUser.cs +++ b/Test/UITest/SpecFlowProjectBDD/StepDefinitions/UploadListingDataPlatformUser.cs @@ -36,6 +36,7 @@ public class UploadListingDataPlatformUser private DssUploadDelivery _DssUploadDelivery; private DateTime _updateTime; private IUnitOfWork _UnitOfWork; + private SFEnums.Environment _Environment = SFEnums.Environment.LOCAL; public UploadListingDataPlatformUser(SeleniumDriver Driver) { @@ -49,10 +50,13 @@ public UploadListingDataPlatformUser(SeleniumDriver Driver) _AppSettings = new AppSettings(); DbContextOptions dbContextOptions = new DbContextOptions(); _DssDBContext = new DssDbContext(dbContextOptions); + + string dbConnectionString = _AppSettings.GetConnectionString(_Environment.ToString().ToLower()) ?? string.Empty; + + _DssDBContext = new DssDbContext(dbContextOptions, dbConnectionString); _UnitOfWork = new UnitOfWork(_DssDBContext); } - [Given(@"I am an authenticated platform representative ""([^""]*)"" with the necessary permissions and the expected result is ""([^""]*)"" and I am a ""([^""]*)"" user")] public void GivenIAmAnAuthenticatedPlatformRepresentativeWithTheNecessaryPermissionsAndTheExpectedResultIsAndIAmAUser(string UserName, string ExpectedResult, string UserType) { @@ -91,7 +95,7 @@ public void WhenIAccessTheDataSharingSystem() if ((null != TOC) && (TOC.Displayed)) { //Nested Angular controls obscure the TermsAndConditionsCheckbox. Need JS - _TermsAndConditionsPage.TermsAndConditionsCheckBox.ExecuteJavaScript(@"document.querySelector(""body > app-root > app-layout > div.content > app-terms-and-conditions > p-card > div > div.p-card-body > div > div > div.checkbox-container > p-checkbox > div > div.p-checkbox-box"").click()"); + _TermsAndConditionsPage.TermsAndConditionsCheckBox.JSExecuteJavaScript(@"document.querySelector(""body > app-root > app-layout > div.content > app-terms-and-conditions > p-card > div > div.p-card-body > div > div > div.checkbox-container > p-checkbox > div > div.p-checkbox-box"").click()"); _TermsAndConditionsPage.ContinueButton.Click(); } } @@ -184,7 +188,7 @@ public void WhenISelectWhichMonthTheSTRListingDataIsFor(string Month) { _UploadListingsPage.ReportingMonthDropDown.Click(); - string listboxItems = _UploadListingsPage.ReportingMonthDropDown.ExecuteJavaScript(@"return document.querySelector(""#month_list"").children.length").ToString(); + string listboxItems = _UploadListingsPage.ReportingMonthDropDown.JSExecuteJavaScript(@"document.querySelector(""#month_list"").children.length").ToString(); int count = 0; @@ -201,7 +205,7 @@ public void WhenISelectWhichMonthTheSTRListingDataIsFor(string Month) //script = $@"document.querySelector(""#month_{i} > span"");"; script = "document.querySelector('#month_" + i + "');"; - string result = _UploadListingsPage.ReportingMonthDropDown.ExecuteJavaScript(script) == null ? string.Empty: _UploadListingsPage.ReportingMonthDropDown.ExecuteJavaScript(script).ToString(); + string result = _UploadListingsPage.ReportingMonthDropDown.JSExecuteJavaScript(script) == null ? string.Empty: _UploadListingsPage.ReportingMonthDropDown.JSExecuteJavaScript(script).ToString(); if (result.ToUpper().Contains(Month.ToUpper())) { @@ -213,7 +217,7 @@ public void WhenISelectWhichMonthTheSTRListingDataIsFor(string Month) //_UploadListingsPage.ReportingMonthDropDown.ExecuteJavaScript(@"document.querySelector(""#month_0 > span"").click()"); //script = $@"document.querySelector(""#month_{index}"").click();"; script = "document.querySelector('#month_1').click();"; - _UploadListingsPage.ReportingMonthDropDown.ExecuteJavaScript(script); + _UploadListingsPage.ReportingMonthDropDown.JSExecuteJavaScript(script); } diff --git a/Test/UITest/TestFrameWork/SeleniumObjects/JavaScript.cs b/Test/UITest/TestFrameWork/SeleniumObjects/JavaScript.cs deleted file mode 100644 index 4a412301..00000000 --- a/Test/UITest/TestFrameWork/SeleniumObjects/JavaScript.cs +++ /dev/null @@ -1,18 +0,0 @@ -using UITest.TestDriver; - -namespace UITest.SeleniumObjects -{ - public class JScript : UIElement - { - public JScript(IDriver Driver, Enums.FINDBY LocatorType, string Locator) : base(Driver) - { - base.Locator = Locator; - base.LocatorType = LocatorType; - } - public bool ExecuteJScript() - { - base.ExecuteJavaScript(base.Locator); - return (true); - } - } -} diff --git a/Test/UITest/TestFrameWork/SeleniumObjects/UIElement.cs b/Test/UITest/TestFrameWork/SeleniumObjects/UIElement.cs index ba107edf..d79d2cbd 100644 --- a/Test/UITest/TestFrameWork/SeleniumObjects/UIElement.cs +++ b/Test/UITest/TestFrameWork/SeleniumObjects/UIElement.cs @@ -69,18 +69,52 @@ public bool FindElement(Enums.FINDBY By, string Locator) return (true); } - public object ExecuteJavaScript(string JavaScript) + + public bool JSCheckVisability(string Selector) { - if (null == _Driver) - throw new ArgumentNullException("No driver defined"); - else - { - IJavaScriptExecutor js = _Driver.Driver as IJavaScriptExecutor; - var result = js.ExecuteScript(JavaScript); - return (result); - } + IJavaScriptExecutor js = _Driver.Driver as IJavaScriptExecutor; + var script = @" + try { + var elem = document.querySelector('" + Selector + @"'); + console.log('Element:', elem); + if (elem) { + console.log('Element found'); + if (typeof elem.checkVisibility === 'function') { + var visibilityResult = elem.checkVisibility(); + console.log('checkVisibility result:', visibilityResult); + return visibilityResult; + } else { + console.error('checkVisibility is not a function'); + return false; + } + } else { + console.error('Element not found'); + return false; + } + } catch (e) { + console.error('Error:', e); + return false; + } + "; + bool result = (bool)js.ExecuteScript(script); + return (result); + } - return (true); + public object JSExecuteJavaScript(string Script) + { + IJavaScriptExecutor js = _Driver.Driver as IJavaScriptExecutor; + var script = @" + try { + var result = " + Script + @"; + console.log('Result:', result); + return(result); + } catch (e) { + console.error('Error:', e); + return false; + } + "; + object result = js.ExecuteScript(script); + return (result); } /// From 4955c58c7bbf140c45e1f663a454ad67140ae16f Mon Sep 17 00:00:00 2001 From: Rick Anderson Date: Fri, 26 Jul 2024 16:53:17 -0700 Subject: [PATCH 9/9] Added additional acceptance criteria validations and minor refactoring --- .../Features/ManagingAccess.feature | 9 +- .../Features/ManagingAccess.feature.cs | 28 ++-- .../SpecFlowProjectBDD/Helpers/AuthHelper.cs | 4 +- .../StepDefinitions/DenyAccessToSystem.cs | 2 +- .../StepDefinitions/ManagingAccess.cs | 132 ++++++++++++------ .../StepDefinitions/STRDSSLandingPage.cs | 2 +- .../SendNoticeOfTakedownWithoutADSSlisting.cs | 2 +- .../SendTakeDownRequestWithoutADSSListing.cs | 2 +- .../StepDefinitions/TermsAndConditions.cs | 2 +- .../UploadListingDataPlatformUser.cs | 2 +- .../Models/ManagingAccessModel.cs | 4 +- .../PageObjects/ManagingAccessPage.cs | 7 +- .../TestDriver/SeleniumDriver.cs | 1 + 13 files changed, 121 insertions(+), 76 deletions(-) diff --git a/Test/UITest/SpecFlowProjectBDD/Features/ManagingAccess.feature b/Test/UITest/SpecFlowProjectBDD/Features/ManagingAccess.feature index 2a196bde..5b0863d4 100644 --- a/Test/UITest/SpecFlowProjectBDD/Features/ManagingAccess.feature +++ b/Test/UITest/SpecFlowProjectBDD/Features/ManagingAccess.feature @@ -19,7 +19,7 @@ Scenario: ManagingAccess #Request Details: - When Reviewing a specific access request + When Reviewing a specific access request Then I should be able to view detailed information provided by the user, including their role request and any justifications or additional comments @@ -27,7 +27,8 @@ Scenario: ManagingAccess When Reviewing an access request - Then There should be a Grant Access button allowing me to approve the user's request + Then There should be a Grant Access button allowing me to approve the user's request "" + #Role Assignment: @@ -62,8 +63,8 @@ Scenario: ManagingAccess # # Examples: - | UserName | ListingID | Description | ExpectedResult | ListingURL | AdditionalCCsTextBox | GovPhoneNumber | TakedownReason | - | CEUATST | 0 | ListingID - Boundary | pass | http://listingURL.com | richard.anderson@dxc.com | 9991231234 | Get a business license | + | UserName | ListingID | Description | ExpectedResult | ListingURL | RequestingAccessUser |AdditionalCCsTextBox | GovPhoneNumber | TakedownReason | + | CEUATST | 0 | ListingID - Boundary | pass | http://listingURL.com | STRDSSVrboDev |richard.anderson@dxc.com | 9991231234 | Get a business license | diff --git a/Test/UITest/SpecFlowProjectBDD/Features/ManagingAccess.feature.cs b/Test/UITest/SpecFlowProjectBDD/Features/ManagingAccess.feature.cs index 013b0ccd..9ca3c05d 100644 --- a/Test/UITest/SpecFlowProjectBDD/Features/ManagingAccess.feature.cs +++ b/Test/UITest/SpecFlowProjectBDD/Features/ManagingAccess.feature.cs @@ -76,8 +76,8 @@ public void ScenarioCleanup() [NUnit.Framework.TestAttribute()] [NUnit.Framework.DescriptionAttribute("ManagingAccess")] [NUnit.Framework.CategoryAttribute("Access")] - [NUnit.Framework.TestCaseAttribute("CEUATST", "0", "ListingID - Boundary", "pass", "http://listingURL.com", "richard.anderson@dxc.com", "9991231234", "Get a business license", null)] - public void ManagingAccess(string userName, string listingID, string description, string expectedResult, string listingURL, string additionalCCsTextBox, string govPhoneNumber, string takedownReason, string[] exampleTags) + [NUnit.Framework.TestCaseAttribute("CEUATST", "0", "ListingID - Boundary", "pass", "http://listingURL.com", "STRDSSVrboDev", "richard.anderson@dxc.com", "9991231234", "Get a business license", null)] + public void ManagingAccess(string userName, string listingID, string description, string expectedResult, string listingURL, string requestingAccessUser, string additionalCCsTextBox, string govPhoneNumber, string takedownReason, string[] exampleTags) { string[] @__tags = new string[] { "Access"}; @@ -92,6 +92,7 @@ public void ManagingAccess(string userName, string listingID, string description argumentsOfScenario.Add("Description", description); argumentsOfScenario.Add("ExpectedResult", expectedResult); argumentsOfScenario.Add("ListingURL", listingURL); + argumentsOfScenario.Add("RequestingAccessUser", requestingAccessUser); argumentsOfScenario.Add("AdditionalCCsTextBox", additionalCCsTextBox); argumentsOfScenario.Add("GovPhoneNumber", govPhoneNumber); argumentsOfScenario.Add("TakedownReason", takedownReason); @@ -134,40 +135,41 @@ public void ManagingAccess(string userName, string listingID, string description testRunner.When("Reviewing an access request", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "When "); #line hidden #line 30 - testRunner.Then("There should be a Grant Access button allowing me to approve the user\'s request", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Then "); + testRunner.Then(string.Format("There should be a Grant Access button allowing me to approve the user\'s request \"" + + "{0}\"", requestingAccessUser), ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Then "); #line hidden -#line 34 +#line 35 testRunner.When("Clicking the Grant Access button", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "When "); #line hidden -#line 36 +#line 37 testRunner.Then("I should be prompted to assign the appropriate roles to the user based on their r" + "equest and the system\'s role hierarchy", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Then "); #line hidden -#line 40 +#line 41 testRunner.When("Reviewing an access request for denial", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "When "); #line hidden -#line 42 +#line 43 testRunner.Then("There should be a Deny Access option allowing me to reject the user\'s request if " + "it is deemed inappropriate or unnecessary", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Then "); #line hidden -#line 46 +#line 47 testRunner.When("Reviewing an access request that has been granted", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "When "); #line hidden -#line 48 +#line 49 testRunner.Then("There should be a Remove Access option allowing me to remove the user\'s access if" + " it is deemed inappropriate or unnecessary", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Then "); #line hidden -#line 52 +#line 53 testRunner.When("Granting or denying access", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "When "); #line hidden -#line 54 +#line 55 testRunner.Then("I should receive a confirmation message indicating the success of the action take" + "n, and the user should be notified accordingly", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Then "); #line hidden -#line 58 +#line 59 testRunner.When("Managing user access requests", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "When "); #line hidden -#line 60 +#line 61 testRunner.Then("The access request list should dynamically update to reflect the current status a" + "pproved or denied of each request", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Then "); #line hidden diff --git a/Test/UITest/SpecFlowProjectBDD/Helpers/AuthHelper.cs b/Test/UITest/SpecFlowProjectBDD/Helpers/AuthHelper.cs index 0bacbd7e..5d61d30e 100644 --- a/Test/UITest/SpecFlowProjectBDD/Helpers/AuthHelper.cs +++ b/Test/UITest/SpecFlowProjectBDD/Helpers/AuthHelper.cs @@ -55,10 +55,10 @@ public LogonTypeEnum SetLogonType(UserTypeEnum UserType) return (_LogonType); } - public LogonTypeEnum? Authenticate(string UserName, UserTypeEnum UserType) + public LogonTypeEnum? Authenticate(string UserName, string Password, UserTypeEnum UserType) { _TestUserName = UserName; - _TestPassword = _AppSettings.GetUser(_TestUserName) ?? string.Empty; + _TestPassword = Password; _LogonType = SetLogonType(UserType); _Driver.Url = _AppSettings.GetServer("default"); diff --git a/Test/UITest/SpecFlowProjectBDD/StepDefinitions/DenyAccessToSystem.cs b/Test/UITest/SpecFlowProjectBDD/StepDefinitions/DenyAccessToSystem.cs index af9af5b0..cd7c69ad 100644 --- a/Test/UITest/SpecFlowProjectBDD/StepDefinitions/DenyAccessToSystem.cs +++ b/Test/UITest/SpecFlowProjectBDD/StepDefinitions/DenyAccessToSystem.cs @@ -103,7 +103,7 @@ public void IAttemptToAccessTheDataSharingSystem(string UserName, string Email, AuthHelper authHelper = new AuthHelper(_Driver); //Authenticate user using IDir or BCID depending on the user - authHelper.Authenticate(_TestUserName, _UserType); + authHelper.Authenticate(_TestUserName, _TestPassword, _UserType); } diff --git a/Test/UITest/SpecFlowProjectBDD/StepDefinitions/ManagingAccess.cs b/Test/UITest/SpecFlowProjectBDD/StepDefinitions/ManagingAccess.cs index 37859d6d..09b7c824 100644 --- a/Test/UITest/SpecFlowProjectBDD/StepDefinitions/ManagingAccess.cs +++ b/Test/UITest/SpecFlowProjectBDD/StepDefinitions/ManagingAccess.cs @@ -1,9 +1,14 @@ using Configuration; +using DataBase.Entities; +using DataBase.UnitOfWork; +using Microsoft.EntityFrameworkCore; +using NUnit.Framework; using NUnit.Framework.Legacy; using OpenQA.Selenium; using OpenQA.Selenium.DevTools.V118.Debugger; using SpecFlowProjectBDD.Helpers; using System.Reflection.Metadata; +using TechTalk.SpecFlow.CommonModels; using TestFrameWork.Models; using UITest.PageObjects; using UITest.TestDriver; @@ -26,6 +31,12 @@ public sealed class ManagingAccess private string _TestPassword; private bool _ExpectedResult = false; AppSettings _AppSettings; + private DssUserIdentity _RequestingUserIdentity; + private bool _OriginalEnabledValue; + private string _OriginalAccessRequestStatusCd = string.Empty; + private DssDbContext _DssDBContext; + private IUnitOfWork _UnitOfWork; + private SFEnums.Environment _Environment = SFEnums.Environment.LOCAL; public ManagingAccess(SeleniumDriver Driver) { @@ -37,8 +48,31 @@ public ManagingAccess(SeleniumDriver Driver) _PathFinderPage = new PathFinderPage(_Driver); _IDirPage = new IDirLoginPage(_Driver); _AppSettings = new AppSettings(); + + DbContextOptions dbContextOptions = new DbContextOptions(); + + string dbConnectionString = _AppSettings.GetConnectionString(_Environment.ToString().ToLower()) ?? string.Empty; + + _DssDBContext = new DssDbContext(dbContextOptions, dbConnectionString); + _UnitOfWork = new UnitOfWork(_DssDBContext); + } + + [SetUp] + public void Setup() + { + } + + [AfterScenario("ManagingAccess")] + public void TearDown() + { + if (null != _RequestingUserIdentity) + { + _RequestingUserIdentity.AccessRequestStatusCd = _OriginalAccessRequestStatusCd; + _DssDBContext.SaveChanges(); + } } + //User Authentication //[Given(@"I am an authenticated LG staff member and the expected result is ""(.*)""")] [Given(@"that I am an authenticated government user ""(.*)"" and the expected result is ""(.*)""")] @@ -46,6 +80,7 @@ public void GivenIAmAauthenticatedGovernmentUser(string UserName, string Expecte { _TestUserName = UserName; _TestPassword = _AppSettings.GetUser(_TestUserName) ?? string.Empty; + _ExpectedResult = ExpectedResult.ToUpper() == "PASS" ? true : false; _Driver.Url = _AppSettings.GetServer("default"); @@ -55,7 +90,7 @@ public void GivenIAmAauthenticatedGovernmentUser(string UserName, string Expecte AuthHelper authHelper = new AuthHelper(_Driver); //Authenticate user using IDir or BCID depending on the user - authHelper.Authenticate(_TestUserName, UserTypeEnum.BCGOVERNMENTSTAFF); + authHelper.Authenticate(_TestUserName, _TestPassword, UserTypeEnum.BCGOVERNMENTSTAFF); IWebElement TOC = null; @@ -90,7 +125,8 @@ public void ThereShouldBeADedicatedSectionForManagingUserAccessRequests() { string selector = "body > app-root > app-layout > div.content > app-user-management > div.table-card-container"; - bool result = (bool)_ManagingAccessPage.ManageAccessSection.JSCheckVisability(selector); + //bool result = (bool)_ManagingAccessPage.UserTable.JSCheckVisability(selector); + bool result = (bool)_ManagingAccessPage.UserTable.IsEnabled(); ClassicAssert.IsTrue(result); } @@ -108,59 +144,30 @@ public void INavigateToTheUserAccessRequestSection() public void IShouldSeeAListDisplayingAllUserAccessRequestss() { bool result = false; - string selector = "#pn_id_14-table"; - result = (bool)_ManagingAccessPage.ManageAccessSection.JSCheckVisability(selector); ; - //result = (bool)_ManagingAccessPage.ManageAccessSection.ExecuteJavaScript(@"document.querySelector(""#pn_id_14-table"").checkVisibility()"); + + result = (bool)_ManagingAccessPage.UserTable.JSExecuteJavaScript(@"document.querySelector(""#user-table"").checkVisibility()"); ClassicAssert.IsTrue(result); - selector = "#pn_id_14-table > tbody"; - result = (bool)_ManagingAccessPage.ManageAccessSection.JSCheckVisability(selector); - //result = (bool)_ManagingAccessPage.ManageAccessSection.ExecuteJavaScript(@"document.querySelector(""#pn_id_14-table > tbody"").checkVisibility()"); + result = (bool)_ManagingAccessPage.UserTable.JSExecuteJavaScript(@"document.querySelector(""#table-header"").checkVisibility()"); ClassicAssert.IsTrue(result); - selector = "#pn_id_14-table > thead > tr > th:nth-child(3)"; - - IJavaScriptExecutor js = _Driver.Driver as IJavaScriptExecutor; - var script = @" - try { - var elem = document.querySelector('" + selector + @"'); - console.log('Element:', elem); - - if (elem) { - console.log('Element found'); - if (elem.textContent.toLowerCase().trim() === 'first name') { - return(true); - } else { - console.error('FirstName Not Found'); - return false; - } - } else { - console.error('Element not found'); - return false; - } - } catch (e) { - console.error('Error:', e); - return false; - }"; - - result = (bool)_ManagingAccessPage.ManageAccessSection.JSExecuteJavaScript(@"document.querySelector(""#pn_id_14-table > thead > tr > th:nth-child(3)"").textContent.toLowerCase().trim() === ""first name"""); - - //result = (bool)_ManagingAccessPage.ManageAccessSection.JSExecuteJavaScript(script); + result = (bool)_ManagingAccessPage.UserTable.JSExecuteJavaScript(@"document.querySelector(""#givenNm_th"").textContent.toLowerCase().trim() === ""first name"""); + ClassicAssert.IsTrue(result); - result = (bool)_ManagingAccessPage.ManageAccessSection.JSExecuteJavaScript(@"document.querySelector('#pn_id_14-table > thead > tr > th:nth-child(4)').textContent.toLowerCase().trim() === 'last name'"); + result = (bool)_ManagingAccessPage.UserTable.JSExecuteJavaScript(@"document.querySelector(""#familyNm_th"").textContent.toLowerCase().trim() === 'last name'"); ClassicAssert.IsTrue(result); - result = (bool)_ManagingAccessPage.ManageAccessSection.JSExecuteJavaScript(@"document.querySelector(""#pn_id_14-table > thead > tr > th:nth-child(7)"").textContent.toLowerCase().trim() === ""organization"""); + result = (bool)_ManagingAccessPage.UserTable.JSExecuteJavaScript(@"document.querySelector(""#orgName_th"").textContent.toLowerCase().trim() === ""organization"""); ClassicAssert.IsTrue(result); - result = (bool)_ManagingAccessPage.ManageAccessSection.JSExecuteJavaScript(@"document.querySelector(""#pn_id_14-table > thead > tr > th:nth-child(6)"").textContent.toLowerCase().trim() === ""email address"""); + result = (bool)_ManagingAccessPage.UserTable.JSExecuteJavaScript(@"document.querySelector(""#emailAddressDsc_th"").textContent.toLowerCase().trim() === ""email address"""); ClassicAssert.IsTrue(result); } //Request Details - [When("Reviewing a specific access request")] + [When(@"Reviewing a specific access request")] public void ReviewingASpecificAccessRequest() { } @@ -168,7 +175,7 @@ public void ReviewingASpecificAccessRequest() [Then("I should be able to view detailed information provided by the user, including their role request and any justifications or additional comments")] public void ShouldBeAbleToViewDetailedInformationProvidedByTheUser() { - bool result = (bool)_ManagingAccessPage.ManageAccessSection.JSExecuteJavaScript(@"document.querySelector(""#pn_id_14-table > tbody > tr:nth-child(1)"").checkVisibility()"); + bool result = (bool)_ManagingAccessPage.UserTable.JSExecuteJavaScript(@"document.querySelector(""#row-0"").checkVisibility()"); ClassicAssert.IsTrue(result); } @@ -178,10 +185,43 @@ public void ReviewingAnAccessRequest() { } - [Then("There should be a Grant Access button allowing me to approve the user's request")] - public void ThereShouldBeAGrantAccessButton() + [Then(@"There should be a Grant Access button allowing me to approve the user's request ""(.*)""")] + public void ThereShouldBeAGrantAccessButton(string RequestingAccessUserEmail) { - bool result = (bool)_ManagingAccessPage.ManageAccessSection.JSExecuteJavaScript(@"document.querySelector(""#pn_id_14-table > tbody > tr:nth-child(1) > td:nth-child(9) > span > p-inputswitch > div"").checkVisibility()"); + + //Get email for first user in list + string email = (string)_ManagingAccessPage.UserTable.JSExecuteJavaScript(@"document.querySelector(""#row-0 > td:nth-child(6)"").innerText"); + + //////////////////// DB Setup //////////////////////////////////////// + // Retrieve the user identity + _RequestingUserIdentity = _DssDBContext.DssUserIdentities.FirstOrDefault(p => p.EmailAddressDsc == email); + if (null == _RequestingUserIdentity) + { + throw new NotFoundException($"{email} not found in Identities table"); + } + _OriginalAccessRequestStatusCd = _RequestingUserIdentity.AccessRequestStatusCd; + _RequestingUserIdentity.AccessRequestStatusCd = "Requested"; + + _DssDBContext.SaveChanges(); + + ///////////////////////////////////////////////////////////// + + _ManagingAccessPage.Driver.Navigate().Refresh(); + + bool result = false; + + //Wait for control to become visable + for (int i = 0; i <= 3; i++) + { + if ((bool)_ManagingAccessPage.UserTable.JSExecuteJavaScript(@"document.querySelector(""#row-0 > td:nth-child(8)"").checkVisibility()")) + { + result = true; + break; + } + System.Threading.Thread.Sleep(1000); + } + result = (bool)_ManagingAccessPage.UserTable.JSExecuteJavaScript(@"document.querySelector(""#row-0 > td:nth-child(8)"").checkVisibility()"); + ClassicAssert.IsTrue(result); } @@ -189,11 +229,13 @@ public void ThereShouldBeAGrantAccessButton() [When("Clicking the Grant Access button")] public void ClickingTheGrantAccessButton() { + _ManagingAccessPage.UserTable.JSExecuteJavaScript(@"document.querySelector(""#form-approve-0-btn"").click()"); } [Then("I should be prompted to assign the appropriate roles to the user based on their request and the system's role hierarchy")] public void IShouldBePromptedToAssignTheAppropriateRolesToTheUser() { + _ManagingAccessPage.UserTable.JSExecuteJavaScript(@"document.querySelector(""#cancel-dialog-btn"").click()"); } @@ -217,7 +259,7 @@ public void ReviewingAnAccessRequestThatHasBeenGranted() [Then("There should be a Remove Access option allowing me to remove the user's access if it is deemed inappropriate or unnecessary")] public void ThereShouldBeARemoveAccessOption() { - bool result = (bool)_ManagingAccessPage.ManageAccessSection.JSExecuteJavaScript(@"document.querySelector(""#pn_id_14-table > tbody > tr:nth-child(1) > td:nth-child(9) > span > p-inputswitch > div"").checkVisibility()"); + bool result = (bool)_ManagingAccessPage.UserTable.JSExecuteJavaScript(@"document.querySelector(""#access-status-0-insw"").checkVisibility()"); ClassicAssert.IsTrue(result); } diff --git a/Test/UITest/SpecFlowProjectBDD/StepDefinitions/STRDSSLandingPage.cs b/Test/UITest/SpecFlowProjectBDD/StepDefinitions/STRDSSLandingPage.cs index ac7c149a..a543a8a6 100644 --- a/Test/UITest/SpecFlowProjectBDD/StepDefinitions/STRDSSLandingPage.cs +++ b/Test/UITest/SpecFlowProjectBDD/StepDefinitions/STRDSSLandingPage.cs @@ -57,7 +57,7 @@ public void GivenIAmAauthenticatedLGStaffMemberUser(string UserName, string Expe _UserType = userHelper.SetUserType(UserType); //Authenticate user using IDir or BCID depending on the user - authHelper.Authenticate(UserName, _UserType); + authHelper.Authenticate(_TestUserName, _TestPassword, _UserType); IWebElement TOC = null; diff --git a/Test/UITest/SpecFlowProjectBDD/StepDefinitions/SendNoticeOfTakedownWithoutADSSlisting.cs b/Test/UITest/SpecFlowProjectBDD/StepDefinitions/SendNoticeOfTakedownWithoutADSSlisting.cs index e643da51..f23df28b 100644 --- a/Test/UITest/SpecFlowProjectBDD/StepDefinitions/SendNoticeOfTakedownWithoutADSSlisting.cs +++ b/Test/UITest/SpecFlowProjectBDD/StepDefinitions/SendNoticeOfTakedownWithoutADSSlisting.cs @@ -52,7 +52,7 @@ public void GivenIAmAauthenticatedLGStaffMemberUser(string UserName, string Expe AuthHelper authHelper = new AuthHelper(_Driver); //Authenticate user using IDir or BCID depending on the user - authHelper.Authenticate(_TestUserName, UserTypeEnum.LOCALGOVERNMENT); + authHelper.Authenticate(_TestUserName, _TestPassword, UserTypeEnum.LOCALGOVERNMENT); IWebElement TOC = null; diff --git a/Test/UITest/SpecFlowProjectBDD/StepDefinitions/SendTakeDownRequestWithoutADSSListing.cs b/Test/UITest/SpecFlowProjectBDD/StepDefinitions/SendTakeDownRequestWithoutADSSListing.cs index ffa473e2..9c443423 100644 --- a/Test/UITest/SpecFlowProjectBDD/StepDefinitions/SendTakeDownRequestWithoutADSSListing.cs +++ b/Test/UITest/SpecFlowProjectBDD/StepDefinitions/SendTakeDownRequestWithoutADSSListing.cs @@ -53,7 +53,7 @@ public void GivenIAmAauthenticatedLGStaffMemberUser(string UserName, string Expe AuthHelper authHelper = new AuthHelper(_Driver); //Authenticate user using IDir or BCID depending on the user - authHelper.Authenticate(_TestUserName, UserTypeEnum.LOCALGOVERNMENT); + authHelper.Authenticate(_TestUserName, _TestPassword, UserTypeEnum.LOCALGOVERNMENT); IWebElement TOC = null; diff --git a/Test/UITest/SpecFlowProjectBDD/StepDefinitions/TermsAndConditions.cs b/Test/UITest/SpecFlowProjectBDD/StepDefinitions/TermsAndConditions.cs index 493387be..fc5fa1b8 100644 --- a/Test/UITest/SpecFlowProjectBDD/StepDefinitions/TermsAndConditions.cs +++ b/Test/UITest/SpecFlowProjectBDD/StepDefinitions/TermsAndConditions.cs @@ -114,7 +114,7 @@ public void ILogInOrAccessTheSystem() AuthHelper authHelper = new AuthHelper(_Driver); //Authenticate user using IDir or BCID depending on the user - _LogonType = authHelper.Authenticate(_TestUserName, _UserType); + _LogonType = authHelper.Authenticate(_TestUserName, _TestPassword, _UserType); ClassicAssert.IsNotNull(_LogonType, "Logon FAILED"); //TODO: Validate that the login was sucessfull diff --git a/Test/UITest/SpecFlowProjectBDD/StepDefinitions/UploadListingDataPlatformUser.cs b/Test/UITest/SpecFlowProjectBDD/StepDefinitions/UploadListingDataPlatformUser.cs index 8177eaef..4b49ad82 100644 --- a/Test/UITest/SpecFlowProjectBDD/StepDefinitions/UploadListingDataPlatformUser.cs +++ b/Test/UITest/SpecFlowProjectBDD/StepDefinitions/UploadListingDataPlatformUser.cs @@ -74,7 +74,7 @@ public void GivenIAmAnAuthenticatedPlatformRepresentativeWithTheNecessaryPermiss _UserType = userHelper.SetUserType(UserType); //Authenticate user using IDir or BCID depending on the user - authHelper.Authenticate(UserName, _UserType); + authHelper.Authenticate(_TestUserName, _TestPassword, _UserType); } [When(@"I access the Data Sharing System")] diff --git a/Test/UITest/TestFrameWork/Models/ManagingAccessModel.cs b/Test/UITest/TestFrameWork/Models/ManagingAccessModel.cs index 8ee48344..f6c01e93 100644 --- a/Test/UITest/TestFrameWork/Models/ManagingAccessModel.cs +++ b/Test/UITest/TestFrameWork/Models/ManagingAccessModel.cs @@ -2,11 +2,11 @@ { public class ManagingAccessModel { - public static string ManageAccessSection + public static string UserTable { get { - return @"/html/body/app-root/app-layout/div[2]/app-user-management/div[2]"; + return "user-table"; } } diff --git a/Test/UITest/TestFrameWork/PageObjects/ManagingAccessPage.cs b/Test/UITest/TestFrameWork/PageObjects/ManagingAccessPage.cs index 3bc29588..fa42b844 100644 --- a/Test/UITest/TestFrameWork/PageObjects/ManagingAccessPage.cs +++ b/Test/UITest/TestFrameWork/PageObjects/ManagingAccessPage.cs @@ -17,7 +17,7 @@ public class ManagingAccessPage private RowList _RequestList; private Button _BackButton; private Button _ForwardButton; - private WebElement _ManageAccessSection; + private WebElement _UserTable; public string URL { get => _URL; set => _URL = value; } @@ -27,8 +27,7 @@ public class ManagingAccessPage public RowList RequestList { get => _RequestList; set => _RequestList = value; } public Button BackButton { get => _BackButton; } public Button ForwardButton { get => _ForwardButton; } - - public WebElement ManageAccessSection { get => _ManageAccessSection; } + public WebElement UserTable { get => _UserTable; } public IDriver Driver { get => _Driver; } public ManagingAccessPage(IDriver Driver) @@ -40,7 +39,7 @@ public ManagingAccessPage(IDriver Driver) _RequestList = new RowList(Driver, Enums.FINDBY.ID, ManagingAccessModel.RequestList); _BackButton = new Button(Driver, Enums.FINDBY.CSSSELECTOR, ManagingAccessModel.BackButton); _ForwardButton = new Button(Driver, Enums.FINDBY.CSSSELECTOR, ManagingAccessModel.ForwardButton); - _ManageAccessSection = new WebElement(Driver, Enums.FINDBY.CSSSELECTOR, ManagingAccessModel.ManageAccessSection); + _UserTable = new WebElement(Driver, Enums.FINDBY.ID, ManagingAccessModel.UserTable); } } } diff --git a/Test/UITest/TestFrameWork/TestDriver/SeleniumDriver.cs b/Test/UITest/TestFrameWork/TestDriver/SeleniumDriver.cs index ce44c4d6..3490e5ad 100644 --- a/Test/UITest/TestFrameWork/TestDriver/SeleniumDriver.cs +++ b/Test/UITest/TestFrameWork/TestDriver/SeleniumDriver.cs @@ -49,6 +49,7 @@ public SeleniumDriver(DRIVERTYPE DriverType) options.SetLoggingPreference(LogType.Driver, LogLevel.All); options.AddArgument("--ignore-ssl-errors=yes"); options.AddArgument("--ignore-certificate-errors"); + options.AddArgument("--start-maximized"); //options.AddArgument("--headless"); Driver = new ChromeDriver(assemblyDirectory, options);