diff --git a/data/offers.js b/data/offers.js index 780d666..33f35b0 100644 --- a/data/offers.js +++ b/data/offers.js @@ -131,6 +131,29 @@ const PLANS = [ note: "Lower priority than Experience plans; hotspot at reduced speeds only.", }, }, + { + id: "tmo-essentials-saver", + carrier: "T-Mobile", + name: "Essentials Saver", + tier: "base", + perLine: { + 1: { price: 50 }, + 2: { price: 50, estimated: true }, + 3: { price: 50, estimated: true }, + 4: { price: 50, estimated: true }, + 5: { price: 50, estimated: true }, + }, + taxesIncluded: false, + notes: "Essentials Saver 2.0 (Aug 2026): $50/line with AutoPay, $55 without. Taxes and fees extra.", + source: "https://www.whistleout.com/CellPhones/Carriers/T-Mobile/Personal/T-Mobile-Essentials-Savings", + features: { + premiumData: 50, + hotspotGB: 0, + international: false, + source: "https://saveonphone.com/plans/t-mobile-essentials-saver/", + note: "50GB premium data, then may slow during congestion; unlimited hotspot at 3G speeds only (no high-speed allotment); 480p video.", + }, + }, { id: "tmo-more", carrier: "T-Mobile", diff --git a/data/qci.js b/data/qci.js index da65a51..37c73a0 100644 --- a/data/qci.js +++ b/data/qci.js @@ -38,6 +38,7 @@ const QCI_BY_PLAN = { // T-Mobile network: QCI 6 = postpaid Experience; QCI 7 = Essentials, Metro, T-Mobile MVNOs "tmo-essentials": { value: 7, note: "One step below T-Mobile's top postpaid priority." }, + "tmo-essentials-saver": { value: 7, note: "Essentials-family priority (QCI 7) for the 50GB premium-data allotment.", allotment: true }, "tmo-more": { value: 6, note: "T-Mobile's top network priority." }, "tmo-beyond": { value: 6, note: "T-Mobile's top network priority." }, "mint": { value: 7, note: "T-Mobile MVNOs like Mint ride at QCI 7 — same as Essentials and Metro." }, diff --git a/features/needs-assessment.feature b/features/needs-assessment.feature index 52deb67..8a895fc 100644 --- a/features/needs-assessment.feature +++ b/features/needs-assessment.feature @@ -72,6 +72,16 @@ Feature: Needs-based plan recommendation And the "Google Fi Unlimited Standard" plan is excluded by needs And the "Google Fi Unlimited Premium" plan is included + Scenario: Essentials Saver's 50GB allotment sits between moderate and heavy + Given the user needs "moderate" data, 0 GB of hotspot, and no international use + When the scenarios are computed + Then the "T-Mobile Essentials Saver" plan is included + + Scenario: Essentials Saver drops out under heavy data needs + Given the user needs "heavy" data, 0 GB of hotspot, and no international use + When the scenarios are computed + Then the "T-Mobile Essentials Saver" plan is excluded by needs + Scenario: MVNOs without priority data are excluded when priority data is needed Given MVNOs are included And the user needs "moderate" data, 0 GB of hotspot, and no international use diff --git a/features/plan-costs.feature b/features/plan-costs.feature index d38d2a3..87db663 100644 --- a/features/plan-costs.feature +++ b/features/plan-costs.feature @@ -33,6 +33,11 @@ Feature: 24-month plan cost calculation Then the "Google Fi Unlimited Essentials" rows have a 24-month plan cost of 1920.00 And the "Google Fi Unlimited Essentials" rows are not flagged as estimated + Scenario: T-Mobile Essentials Saver single-line pricing + Given 1 line with no new devices + When the scenarios are computed + Then the "T-Mobile Essentials Saver" rows have a 24-month plan cost of 1200.00 + Scenario: A price the source did not publish is flagged as estimated Given 3 lines with no new devices When the scenarios are computed diff --git a/features/results-classification.feature b/features/results-classification.feature index 3d68ad5..7773373 100644 --- a/features/results-classification.feature +++ b/features/results-classification.feature @@ -13,8 +13,8 @@ Feature: Result classification — best option, cheapest option, differentiators Scenario: The cheapest option has the lowest true cost and is labeled When the results are classified - Then the cheapest option is "AT&T Value 2.0" - And the "AT&T Value 2.0" option carries the "Cheapest overall" differentiator + Then the cheapest option is "T-Mobile Essentials Saver" + And the "T-Mobile Essentials Saver" option carries the "Cheapest overall" differentiator Scenario: The best option maximizes plan features, tie broken by cost When the results are classified