With the FCC's help we'll scour the county and find you the best internet possible for your business.
+Symmetrical fiber internet for your business across Washington, Oregon, Idaho, and Montana.
๐ชจ Your internet connection is the bedrock of your business.
-๐ Let us accelerate your business with the latest Fiber to the Premises technology or tried and tested Copper and Cable connectivity.
-๐บ With 5G networks we can also offer you Licensed or Unlicensed Fixed Wireless alternatives to suit your needs.
+๐ Let us accelerate your business with symmetrical fiber internet at 300 Mbps for $75/mo or 1 Gbps for $115/mo on a 2, 3 or 5 year term.
+๐ Save $15/mo on fiber internet when you bundle it with any of our phone services.
+๐ข Need dedicated bandwidth with an SLA? Ethernet internet access is available at many business addresses, contact us for a quote.
๐ค Whatever technology you choose, rest assured that Accelerate Networks will handle all the details with our Seattle-based support and installation teams.
| Technology | -Down | -Up | +Service | +Speed | +Price | Action | @if (order?.ProductOrders is not null) diff --git a/NumberSearch.Tests/Integration.cs b/NumberSearch.Tests/Integration.cs index 9232d06f..b3b20512 100644 --- a/NumberSearch.Tests/Integration.cs +++ b/NumberSearch.Tests/Integration.cs @@ -969,7 +969,7 @@ public async Task BulkVSRESTValidatePortabilityAsync() public async Task TeleDynamicsProductCheckQuantityAsync() { // Arrange - var partNumber = "yea-sip-t54w"; + var partNumber = "yea-sip-t87w"; // Act var results = await VendorProduct.GetAsync(partNumber, _teleDynamicsUsername, _teleDynamicsPassword); @@ -2420,4 +2420,4 @@ public void ParseAddressForOrder() // Assert.False(string.IsNullOrWhiteSpace(result.EmailSubject)); //} } -} \ No newline at end of file +} diff --git a/NumberSearch.Tests/Unit.cs b/NumberSearch.Tests/Unit.cs index d0e05bdb..4580aa27 100644 --- a/NumberSearch.Tests/Unit.cs +++ b/NumberSearch.Tests/Unit.cs @@ -26,5 +26,136 @@ public void PortPinTest() Assert.True(pin > 0); Assert.True(pin > 100000); } + + [Theory] + [InlineData("Pine Cliff", "pinecliff")] + [InlineData("1st", "1st")] + [InlineData("Bothell-Everett ", "bothelleverett")] + [InlineData("O'Neil", "oneil")] + [InlineData("", "")] + public void ServiceAddressStreetKeyTest(string streetName, string expected) + { + Assert.Equal(expected, NumberSearch.DataAccess.ServiceAddress.ToStreetKey(streetName)); + } + + [Fact] + public void InternetBundleDiscountTest() + { + var fiber = new NumberSearch.DataAccess.ProductOrder { ServiceId = NumberSearch.DataAccess.InternetBundle.FiberInternet1GServiceId, Quantity = 1 }; + var twoFiber = new NumberSearch.DataAccess.ProductOrder { ServiceId = NumberSearch.DataAccess.InternetBundle.FiberInternet300ServiceId, Quantity = 2 }; + var lines = new NumberSearch.DataAccess.ProductOrder { ServiceId = NumberSearch.DataAccess.InternetBundle.StandardLinesServiceId, Quantity = 3 }; + var seats = new NumberSearch.DataAccess.ProductOrder { ServiceId = NumberSearch.DataAccess.InternetBundle.ConcurrentSeatsServiceId, Quantity = 1 }; + var noLines = new NumberSearch.DataAccess.ProductOrder { ServiceId = NumberSearch.DataAccess.InternetBundle.StandardLinesServiceId, Quantity = 0 }; + var partner = new NumberSearch.DataAccess.ProductOrder { CouponId = NumberSearch.DataAccess.InternetBundle.PartnerCouponId, Quantity = 1 }; + var otherCoupon = new NumberSearch.DataAccess.ProductOrder { CouponId = Guid.NewGuid(), Quantity = 1 }; + + // Fiber on its own, or with a coupon that isn't Partner, pays full price. + Assert.Equal(0, NumberSearch.DataAccess.InternetBundle.Discount([fiber])); + Assert.Equal(0, NumberSearch.DataAccess.InternetBundle.Discount([fiber, otherCoupon, noLines])); + // Phone service or the Partner coupon take $15 off each fiber connection, never more. + Assert.Equal(15, NumberSearch.DataAccess.InternetBundle.Discount([fiber, lines])); + Assert.Equal(15, NumberSearch.DataAccess.InternetBundle.Discount([fiber, lines, seats, partner])); + Assert.Equal(15, NumberSearch.DataAccess.InternetBundle.Discount([fiber, partner])); + Assert.Equal(45, NumberSearch.DataAccess.InternetBundle.Discount([fiber, twoFiber, seats])); + // Phone service without fiber has nothing to discount. + Assert.Equal(0, NumberSearch.DataAccess.InternetBundle.Discount([lines, partner])); + + // Coupons don't carry a meaningful quantity, so a Partner line qualifies whatever its quantity. + var partnerNoQuantity = new NumberSearch.DataAccess.ProductOrder { CouponId = NumberSearch.DataAccess.InternetBundle.PartnerCouponId, Quantity = 0 }; + Assert.Equal(15, NumberSearch.DataAccess.InternetBundle.Discount([fiber, partnerNoQuantity])); + + Assert.True(NumberSearch.DataAccess.InternetBundle.IsPartnerOnly([fiber, partner])); + Assert.False(NumberSearch.DataAccess.InternetBundle.IsPartnerOnly([fiber, lines, partner])); + } + + [Theory] + [InlineData("1.0G/1.0G", 1000)] + [InlineData("300.0M/300.0M", 300)] + [InlineData("2.0G/2.0G", 2000)] + [InlineData("10G", 10000)] + [InlineData("1000M", 1000)] + [InlineData("50.0M/50.0M", 50)] + [InlineData("1 Gbps", 1000)] + [InlineData("", 0)] + [InlineData("fast", 0)] + [InlineData("3000000G", int.MaxValue)] + public void ServiceAddressParseMbpsTest(string maxSpeed, int expected) + { + Assert.Equal(expected, NumberSearch.DataAccess.ServiceAddress.ParseMbps(maxSpeed)); + } + + [Theory] + [InlineData("512", "512")] + [InlineData("0512", "512")] + [InlineData("512 1/2", "512")] + [InlineData("1250A", "1250")] + [InlineData("N123", "")] + [InlineData("", "")] + public void ServiceAddressHouseKeyTest(string houseNumber, string expected) + { + Assert.Equal(expected, NumberSearch.DataAccess.ServiceAddress.ToHouseKey(houseNumber)); + } + + [Fact] + public void InternetBundleCanSellAtTest() + { + var gig = new NumberSearch.DataAccess.ServiceAddress { Product = "WFI", Status = "Sellable", MaxSpeed = "1.0G/1.0G", BuildingKey = "BK-1" }; + var slow = new NumberSearch.DataAccess.ServiceAddress { Product = "WFI", Status = "Sellable", MaxSpeed = "300.0M/300.0M", BuildingKey = "BK-2" }; + var slower = new NumberSearch.DataAccess.ServiceAddress { Product = "WFI", Status = "Sellable", MaxSpeed = "100.0M/100.0M", BuildingKey = "BK-3" }; + var unreadable = new NumberSearch.DataAccess.ServiceAddress { Product = "WFI", Status = "Sellable", MaxSpeed = "", BuildingKey = "BK-4" }; + var confirm = new NumberSearch.DataAccess.ServiceAddress { Product = "WFI", Status = "Confirm", MaxSpeed = "1.0G/1.0G", BuildingKey = "BK-5" }; + var eia = new NumberSearch.DataAccess.ServiceAddress { Product = "EIA", Status = "Quote", MaxSpeed = "1.0G/1.0G", BuildingKey = "BK-6" }; + var noKey = new NumberSearch.DataAccess.ServiceAddress { Product = "WFI", Status = "Sellable", MaxSpeed = "1.0G/1.0G", BuildingKey = "" }; + var t300 = NumberSearch.DataAccess.InternetBundle.FiberInternet300ServiceId; + var t1g = NumberSearch.DataAccess.InternetBundle.FiberInternet1GServiceId; + + Assert.True(NumberSearch.DataAccess.InternetBundle.CanSellAt(t300, gig)); + Assert.True(NumberSearch.DataAccess.InternetBundle.CanSellAt(t1g, gig)); + Assert.True(NumberSearch.DataAccess.InternetBundle.CanSellAt(t300, slow)); + Assert.False(NumberSearch.DataAccess.InternetBundle.CanSellAt(t1g, slow)); + Assert.False(NumberSearch.DataAccess.InternetBundle.CanSellAt(t300, slower)); + Assert.False(NumberSearch.DataAccess.InternetBundle.CanSellAt(t300, unreadable)); + Assert.False(NumberSearch.DataAccess.InternetBundle.CanSellAt(t300, confirm)); + Assert.False(NumberSearch.DataAccess.InternetBundle.CanSellAt(t300, eia)); + Assert.False(NumberSearch.DataAccess.InternetBundle.CanSellAt(NumberSearch.DataAccess.InternetBundle.StandardLinesServiceId, gig)); + // Without a building key Cart/Add can't re-qualify the building, so it's never offered at a price. + Assert.False(NumberSearch.DataAccess.InternetBundle.CanSellAt(t300, noKey)); + } + + [Fact] + public void InternetBundleQualifyingAddressTest() + { + var t300 = NumberSearch.DataAccess.InternetBundle.FiberInternet300ServiceId; + var t1g = NumberSearch.DataAccess.InternetBundle.FiberInternet1GServiceId; + var sellable = new NumberSearch.DataAccess.ServiceAddress { Product = "WFI", Status = "Sellable", MaxSpeed = "1.0G/1.0G", BuildingKey = "BK-1" }; + var confirm = new NumberSearch.DataAccess.ServiceAddress { Product = "WFI", Status = "Confirm", MaxSpeed = "300.0M/300.0M", BuildingKey = "BK-1" }; + var slow = new NumberSearch.DataAccess.ServiceAddress { Product = "WFI", Status = "Sellable", MaxSpeed = "300.0M/300.0M", BuildingKey = "BK-1" }; + var noKey = new NumberSearch.DataAccess.ServiceAddress { Product = "WFI", Status = "Sellable", MaxSpeed = "1.0G/1.0G", BuildingKey = "" }; + + // Rows sharing a key qualify the same way whichever order they come back in. + Assert.Same(sellable, NumberSearch.DataAccess.InternetBundle.QualifyingAddress(t1g, [confirm, sellable])); + Assert.Same(sellable, NumberSearch.DataAccess.InternetBundle.QualifyingAddress(t1g, [sellable, confirm])); + Assert.Same(sellable, NumberSearch.DataAccess.InternetBundle.QualifyingAddress(t300, [slow, confirm, sellable])); + Assert.Same(slow, NumberSearch.DataAccess.InternetBundle.QualifyingAddress(t300, [confirm, slow])); + Assert.Null(NumberSearch.DataAccess.InternetBundle.QualifyingAddress(t1g, [confirm, slow])); + Assert.Null(NumberSearch.DataAccess.InternetBundle.QualifyingAddress(t300, [noKey])); + Assert.Null(NumberSearch.DataAccess.InternetBundle.QualifyingAddress(t300, [])); + } + + [Fact] + public void InternetBundleFiberNotesTest() + { + Assert.Equal("3 year term. Service address: 71 Pine Cliff Dr, Naches, Washington 98937. Fiber.", NumberSearch.DataAccess.InternetBundle.FiberNotes(3, "71 Pine Cliff Dr, Naches, Washington 98937", "Fiber.")); + Assert.Equal("Fiber.", NumberSearch.DataAccess.InternetBundle.FiberNotes(0, "", "Fiber.")); + } + + [Fact] + public void ServiceAddressDistanceTest() + { + // 0.0001 degrees of latitude is about 11 meters. + var meters = NumberSearch.DataAccess.ServiceAddress.DistanceMeters(46.8993, -121.0128, 46.8994, -121.0128); + Assert.InRange(meters, 10.5, 11.5); + Assert.Equal(0, NumberSearch.DataAccess.ServiceAddress.DistanceMeters(46.8993, -121.0128, 46.8993, -121.0128)); + } } } |
|---|