subscription_usage_tests.rs

 1use chrono::{Duration, Utc};
 2use pretty_assertions::assert_eq;
 3
 4use crate::db::billing_subscription::SubscriptionKind;
 5use crate::db::{UserId, billing_subscription};
 6use crate::llm::db::LlmDatabase;
 7use crate::test_llm_db;
 8
 9test_llm_db!(
10    test_transfer_existing_subscription_usage,
11    test_transfer_existing_subscription_usage_postgres
12);
13
14async fn test_transfer_existing_subscription_usage(db: &mut LlmDatabase) {
15    let user_id = UserId(1);
16
17    let now = Utc::now();
18
19    let trial_period_start_at = now - Duration::days(14);
20    let trial_period_end_at = now;
21
22    let new_period_start_at = now;
23    let new_period_end_at = now + Duration::days(30);
24
25    let existing_subscription = billing_subscription::Model {
26        kind: Some(SubscriptionKind::ZedProTrial),
27        stripe_current_period_start: Some(trial_period_start_at.timestamp()),
28        stripe_current_period_end: Some(trial_period_end_at.timestamp()),
29        ..Default::default()
30    };
31
32    let existing_usage = db
33        .create_subscription_usage(
34            user_id,
35            trial_period_start_at,
36            trial_period_end_at,
37            SubscriptionKind::ZedProTrial,
38            25,
39            1_000,
40        )
41        .await
42        .unwrap();
43
44    let transferred_usage = db
45        .transfer_existing_subscription_usage(
46            user_id,
47            &existing_subscription,
48            Some(SubscriptionKind::ZedPro),
49            new_period_start_at,
50            new_period_end_at,
51        )
52        .await
53        .unwrap();
54
55    assert!(
56        transferred_usage.is_some(),
57        "subscription usage not transferred successfully"
58    );
59    let transferred_usage = transferred_usage.unwrap();
60
61    assert_eq!(
62        transferred_usage.model_requests,
63        existing_usage.model_requests
64    );
65    assert_eq!(
66        transferred_usage.edit_predictions,
67        existing_usage.edit_predictions
68    );
69}