Skip to content

Commit 752ca76

Browse files
committed
sentry - routes - campaign list + tests
1 parent c2fe801 commit 752ca76

File tree

2 files changed

+62
-49
lines changed

2 files changed

+62
-49
lines changed

sentry/src/routes/campaign.rs

Lines changed: 58 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
//! `/v5/campaign` routes
22
use crate::{
3+
application::Qs,
34
db::{
45
accounting::{get_accounting, Side},
56
campaign::{
@@ -21,8 +22,10 @@ use hyper::{Body, Request, Response};
2122
use primitives::{
2223
campaign_validator::Validator,
2324
sentry::{
24-
campaign_create::CreateCampaign, campaign_list::CampaignListQuery,
25-
campaign_modify::ModifyCampaign, SuccessResponse,
25+
campaign_create::CreateCampaign,
26+
campaign_list::{CampaignListQuery, CampaignListResponse},
27+
campaign_modify::ModifyCampaign,
28+
SuccessResponse,
2629
},
2730
spender::Spendable,
2831
Address, Campaign, CampaignId, ChainOf, Channel, ChannelId, Deposit, UnifiedNum,
@@ -425,6 +428,29 @@ where
425428
Ok(success_response(serde_json::to_string(&campaign)?))
426429
}
427430

431+
/// GET `/v5/campaign/list`
432+
pub async fn campaign_list_axum<C: Locked + 'static>(
433+
Extension(app): Extension<Arc<Application<C>>>,
434+
Qs(query): Qs<CampaignListQuery>,
435+
) -> Result<Json<CampaignListResponse>, ResponseError> {
436+
let limit = app.config.campaigns_find_limit;
437+
let skip = query
438+
.page
439+
.checked_mul(limit.into())
440+
.ok_or_else(|| ResponseError::BadRequest("Page and/or limit is too large".into()))?;
441+
let list_response = list_campaigns(
442+
&app.pool,
443+
skip,
444+
limit,
445+
query.creator,
446+
query.validator,
447+
&query.active_to_ge,
448+
)
449+
.await?;
450+
451+
Ok(Json(list_response))
452+
}
453+
428454
/// GET `/v5/campaign/list`
429455
pub async fn campaign_list<C: Locked + 'static>(
430456
req: Request<Body>,
@@ -1294,7 +1320,7 @@ mod test {
12941320
use primitives::{
12951321
campaign::validators::Validators,
12961322
config::GANACHE_CONFIG,
1297-
sentry::campaign_list::{CampaignListResponse, ValidatorParam},
1323+
sentry::campaign_list::ValidatorParam,
12981324
test_util::{
12991325
CREATOR, DUMMY_CAMPAIGN, DUMMY_VALIDATOR_FOLLOWER, DUMMY_VALIDATOR_LEADER, FOLLOWER,
13001326
GUARDIAN, IDS, LEADER, LEADER_2, PUBLISHER_2,
@@ -1668,18 +1694,12 @@ mod test {
16681694
}
16691695
}
16701696

1671-
async fn res_to_campaign_list_response(res: Response<Body>) -> CampaignListResponse {
1672-
let json = hyper::body::to_bytes(res.into_body())
1673-
.await
1674-
.expect("Should get json");
1675-
1676-
serde_json::from_slice(&json).expect("Should deserialize CampaignListResponse")
1677-
}
1678-
16791697
#[tokio::test]
16801698
async fn test_campaign_list() {
1681-
let mut app = setup_dummy_app().await;
1682-
app.config.campaigns_find_limit = 2;
1699+
let mut app_guard = setup_dummy_app().await;
1700+
app_guard.config.campaigns_find_limit = 2;
1701+
let app = Extension(Arc::new(app_guard.app.clone()));
1702+
16831703
// Setting up new leader and a channel and campaign which use it on Ganache #1337
16841704
let dummy_leader_2 = ValidatorDesc {
16851705
id: IDS[&LEADER_2],
@@ -1797,14 +1817,6 @@ mod test {
17971817
.await
17981818
.expect("Should insert dummy campaign");
17991819

1800-
let build_request = |query: CampaignListQuery| {
1801-
let query = serde_qs::to_string(&query).expect("should parse query");
1802-
Request::builder()
1803-
.uri(format!("http://127.0.0.1/v5/campaign/list?{}", query))
1804-
.body(Body::empty())
1805-
.expect("Should build Request")
1806-
};
1807-
18081820
// Test for dummy leader
18091821
{
18101822
let query = CampaignListQuery {
@@ -1813,10 +1825,11 @@ mod test {
18131825
creator: None,
18141826
validator: Some(ValidatorParam::Leader(DUMMY_VALIDATOR_LEADER.id)),
18151827
};
1816-
let res = campaign_list(build_request(query), &app)
1828+
1829+
let res = campaign_list_axum(app.clone(), Qs(query))
18171830
.await
1818-
.expect("should get campaigns");
1819-
let res = res_to_campaign_list_response(res).await;
1831+
.expect("should get campaigns")
1832+
.0;
18201833

18211834
assert_eq!(
18221835
res.campaigns,
@@ -1831,10 +1844,10 @@ mod test {
18311844
creator: None,
18321845
validator: Some(ValidatorParam::Leader(DUMMY_VALIDATOR_LEADER.id)),
18331846
};
1834-
let res = campaign_list(build_request(query), &app)
1847+
let res = campaign_list_axum(app.clone(), Qs(query))
18351848
.await
1836-
.expect("should get campaigns");
1837-
let res = res_to_campaign_list_response(res).await;
1849+
.expect("should get campaigns")
1850+
.0;
18381851

18391852
assert_eq!(
18401853
res.campaigns,
@@ -1854,10 +1867,10 @@ mod test {
18541867
creator: None,
18551868
validator: Some(ValidatorParam::Validator(DUMMY_VALIDATOR_FOLLOWER.id)),
18561869
};
1857-
let res = campaign_list(build_request(query), &app)
1870+
let res = campaign_list_axum(app.clone(), Qs(query))
18581871
.await
1859-
.expect("should get campaigns");
1860-
let res = res_to_campaign_list_response(res).await;
1872+
.expect("should get campaigns")
1873+
.0;
18611874

18621875
assert_eq!(
18631876
res.campaigns,
@@ -1872,10 +1885,10 @@ mod test {
18721885
creator: None,
18731886
validator: Some(ValidatorParam::Validator(DUMMY_VALIDATOR_FOLLOWER.id)),
18741887
};
1875-
let res = campaign_list(build_request(query), &app)
1888+
let res = campaign_list_axum(app.clone(), Qs(query))
18761889
.await
1877-
.expect("should get campaigns");
1878-
let res = res_to_campaign_list_response(res).await;
1890+
.expect("should get campaigns")
1891+
.0;
18791892

18801893
assert_eq!(
18811894
res.campaigns,
@@ -1895,10 +1908,10 @@ mod test {
18951908
creator: None,
18961909
validator: Some(ValidatorParam::Leader(dummy_leader_2.id)),
18971910
};
1898-
let res = campaign_list(build_request(query), &app)
1911+
let res = campaign_list_axum(app.clone(), Qs(query))
18991912
.await
1900-
.expect("should get campaigns");
1901-
let res = res_to_campaign_list_response(res).await;
1913+
.expect("should get campaigns")
1914+
.0;
19021915

19031916
assert_eq!(
19041917
res.campaigns,
@@ -1919,10 +1932,10 @@ mod test {
19191932
creator: None,
19201933
validator: Some(ValidatorParam::Validator(dummy_follower_2.id)),
19211934
};
1922-
let res = campaign_list(build_request(query), &app)
1935+
let res = campaign_list_axum(app.clone(), Qs(query))
19231936
.await
1924-
.expect("should get campaigns");
1925-
let res = res_to_campaign_list_response(res).await;
1937+
.expect("should get campaigns")
1938+
.0;
19261939

19271940
assert_eq!(
19281941
res.campaigns,
@@ -1943,10 +1956,10 @@ mod test {
19431956
creator: Some(*PUBLISHER_2),
19441957
validator: None,
19451958
};
1946-
let res = campaign_list(build_request(query), &app)
1959+
let res = campaign_list_axum(app.clone(), Qs(query))
19471960
.await
1948-
.expect("should get campaigns");
1949-
let res = res_to_campaign_list_response(res).await;
1961+
.expect("should get campaigns")
1962+
.0;
19501963

19511964
assert_eq!(
19521965
res.campaigns,
@@ -1964,10 +1977,10 @@ mod test {
19641977
creator: None,
19651978
validator: None,
19661979
};
1967-
let res = campaign_list(build_request(query), &app)
1980+
let res = campaign_list_axum(app.clone(), Qs(query))
19681981
.await
1969-
.expect("should get campaigns");
1970-
let res = res_to_campaign_list_response(res).await;
1982+
.expect("should get campaigns")
1983+
.0;
19711984

19721985
assert_eq!(
19731986
res.campaigns,

sentry/src/routes/routers.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -339,12 +339,11 @@ pub fn campaigns_router_axum<C: Locked + 'static>() -> Router {
339339
)
340340
.route(
341341
"/close",
342-
post(campaign::close_campaign_axum::<C>)
343-
.route_layer(
344-
ServiceBuilder::new()
342+
post(campaign::close_campaign_axum::<C>).route_layer(
343+
ServiceBuilder::new()
345344
.layer(middleware::from_fn(authentication_required::<C, _>))
346345
.layer(middleware::from_fn(called_by_creator::<C, _>)),
347-
),
346+
),
348347
)
349348
.layer(
350349
// keeps the order from top to bottom!
@@ -354,6 +353,7 @@ pub fn campaigns_router_axum<C: Locked + 'static>() -> Router {
354353
);
355354

356355
Router::new()
356+
.route("/list", get(campaign::campaign_list_axum::<C>))
357357
.route(
358358
"/",
359359
// For creating campaigns

0 commit comments

Comments
 (0)