mirror of
https://github.com/modrinth/code.git
synced 2026-08-31 03:55:59 +00:00
118 lines
3.2 KiB
Rust
118 lines
3.2 KiB
Rust
#![expect(missing_docs, reason = "test crate")]
|
|
|
|
use aditude::{Client, mock::AditudeMock, v1, v2};
|
|
use chrono::{DateTime, Utc};
|
|
use rust_decimal::dec;
|
|
|
|
#[tokio::test]
|
|
async fn mock_metrics() {
|
|
let metrics_v1_response = vec![v1::MetricsResponse {
|
|
points_list: vec![v1::Point {
|
|
metric: v1::Metric {
|
|
revenue: Some(dec!(1.23)),
|
|
impressions: Some(456),
|
|
cpm: Some(dec!(7.89)),
|
|
},
|
|
time: v1::Time {
|
|
seconds: 123,
|
|
nanos: 0,
|
|
},
|
|
}],
|
|
}];
|
|
|
|
let epoch = DateTime::UNIX_EPOCH;
|
|
let metrics_v2_response = v2::Metrics {
|
|
responses: vec![
|
|
v2::Response {
|
|
rows: vec![v2::Row {
|
|
impressions: Some(123),
|
|
revenue: None,
|
|
time: epoch,
|
|
}],
|
|
},
|
|
v2::Response {
|
|
rows: vec![v2::Row {
|
|
impressions: None,
|
|
revenue: Some(dec!(45.6)),
|
|
time: epoch,
|
|
}],
|
|
},
|
|
],
|
|
};
|
|
|
|
let aditude = Client::from_mock(AditudeMock {
|
|
metrics_v1_response: Some(metrics_v1_response.clone()),
|
|
metrics_v2_response: Some(metrics_v2_response.clone()),
|
|
});
|
|
assert_eq!(
|
|
metrics_v1_response,
|
|
aditude
|
|
.get_metrics_v1(v1::GetMetrics {
|
|
metrics: &[],
|
|
range: v1::Range::Yesterday,
|
|
interval: v1::Interval::OneDay,
|
|
})
|
|
.await
|
|
.unwrap()
|
|
);
|
|
assert_eq!(
|
|
metrics_v2_response,
|
|
aditude
|
|
.get_metrics_v2(v2::GetMetrics {
|
|
metrics: &[],
|
|
range: v2::Range::Yesterday,
|
|
interval: v2::Interval::OneDay,
|
|
})
|
|
.await
|
|
.unwrap()
|
|
);
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn test_yesterday() {
|
|
_ = dotenvy::dotenv();
|
|
let (Ok(url), Ok(key)) = (
|
|
dotenvy::var("ADITUDE_API_URL"),
|
|
dotenvy::var("ADITUDE_API_KEY"),
|
|
) else {
|
|
return;
|
|
};
|
|
if url.trim().is_empty()
|
|
|| key.trim().is_empty()
|
|
|| url == "none"
|
|
|| key == "none"
|
|
{
|
|
return;
|
|
}
|
|
|
|
let aditude = Client::new(url, key);
|
|
|
|
let real_yesterday = aditude
|
|
.get_metrics_v2(v2::GetMetrics {
|
|
metrics: &[v2::MetricKind::Impressions, v2::MetricKind::Revenue],
|
|
range: v2::Range::Yesterday,
|
|
interval: v2::Interval::OneDay,
|
|
})
|
|
.await
|
|
.unwrap();
|
|
|
|
// Aditude defines the time range "Yesterday" according to this logic, I think.
|
|
// We need to make sure it stays defined like this.
|
|
let now = Utc::now();
|
|
let (start_of_yesterday, end_of_yesterday) = aditude::yesterday(now);
|
|
|
|
let our_yesterday = aditude
|
|
.get_metrics_v2(v2::GetMetrics {
|
|
metrics: &[v2::MetricKind::Impressions, v2::MetricKind::Revenue],
|
|
range: v2::Range::Custom {
|
|
start: start_of_yesterday,
|
|
end: end_of_yesterday,
|
|
},
|
|
interval: v2::Interval::OneDay,
|
|
})
|
|
.await
|
|
.unwrap();
|
|
|
|
assert_eq!(real_yesterday, our_yesterday);
|
|
}
|