Skip to content

Commit 8db0a60

Browse files
authored
Merge pull request #488 from AmbireTech/tests-for-collect-channels-campaign-list
SentryApi + GET /v5/campaign/list route tests
2 parents b01fb20 + 8295e07 commit 8db0a60

File tree

3 files changed

+578
-8
lines changed

3 files changed

+578
-8
lines changed

primitives/src/campaign.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ mod campaign_id {
4040
write!(f, "CampaignId({})", self)
4141
}
4242
}
43-
43+
4444
impl CampaignId {
4545
/// Generates randomly a `CampaignId` using `Uuid::new_v4().to_simple()`
4646
pub fn new() -> Self {

sentry/src/routes/campaign.rs

Lines changed: 310 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -997,10 +997,17 @@ mod test {
997997
use crate::test_util::setup_dummy_app;
998998
use crate::update_campaign::DeltaBudget;
999999
use adapter::primitives::Deposit;
1000+
use chrono::{TimeZone, Utc};
10001001
use hyper::StatusCode;
10011002
use primitives::{
1002-
test_util::{DUMMY_CAMPAIGN, IDS, LEADER},
1003-
BigNum, ValidatorId,
1003+
campaign::validators::Validators,
1004+
config::GANACHE_CONFIG,
1005+
sentry::campaign_list::{CampaignListResponse, ValidatorParam},
1006+
test_util::{
1007+
DUMMY_CAMPAIGN, DUMMY_VALIDATOR_FOLLOWER, DUMMY_VALIDATOR_LEADER, FOLLOWER, GUARDIAN,
1008+
IDS, LEADER, LEADER_2, PUBLISHER_2,
1009+
},
1010+
BigNum, ValidatorDesc, ValidatorId,
10041011
};
10051012

10061013
#[tokio::test]
@@ -1427,4 +1434,305 @@ mod test {
14271434
);
14281435
}
14291436
}
1437+
1438+
async fn res_to_campaign_list_response(res: Response<Body>) -> CampaignListResponse {
1439+
let json = hyper::body::to_bytes(res.into_body())
1440+
.await
1441+
.expect("Should get json");
1442+
1443+
serde_json::from_slice(&json).expect("Should deserialize CampaignListResponse")
1444+
}
1445+
1446+
#[tokio::test]
1447+
async fn test_campaign_list() {
1448+
let mut app = setup_dummy_app().await;
1449+
app.config.campaigns_find_limit = 2;
1450+
// Setting up new leader and a channel and campaign which use it on Ganache #1337
1451+
let dummy_leader_2 = ValidatorDesc {
1452+
id: IDS[&LEADER_2],
1453+
url: "http://tom.adex.network".to_string(),
1454+
fee: 200.into(),
1455+
fee_addr: None,
1456+
};
1457+
let channel_new_leader = Channel {
1458+
leader: IDS[&*LEADER_2],
1459+
follower: IDS[&*FOLLOWER],
1460+
guardian: *GUARDIAN,
1461+
token: DUMMY_CAMPAIGN.channel.token,
1462+
nonce: DUMMY_CAMPAIGN.channel.nonce,
1463+
};
1464+
let mut campaign_new_leader = DUMMY_CAMPAIGN.clone();
1465+
campaign_new_leader.id = CampaignId::new();
1466+
campaign_new_leader.channel = channel_new_leader;
1467+
campaign_new_leader.validators =
1468+
Validators::new((dummy_leader_2.clone(), DUMMY_VALIDATOR_FOLLOWER.clone()));
1469+
campaign_new_leader.created = Utc.ymd(2021, 2, 1).and_hms(8, 0, 0);
1470+
1471+
let chain_1_token = GANACHE_CONFIG
1472+
.chains
1473+
.get("Ganache #1")
1474+
.unwrap()
1475+
.tokens
1476+
.get("Mocked TOKEN 2")
1477+
.unwrap()
1478+
.address;
1479+
// Setting up new follower and a channel and campaign which use it on Ganache #1
1480+
let dummy_follower_2 = ValidatorDesc {
1481+
id: IDS[&GUARDIAN],
1482+
url: "http://jerry.adex.network".to_string(),
1483+
fee: 300.into(),
1484+
fee_addr: None,
1485+
};
1486+
let channel_new_follower = Channel {
1487+
leader: IDS[&*LEADER],
1488+
follower: IDS[&*GUARDIAN],
1489+
guardian: *GUARDIAN,
1490+
token: chain_1_token,
1491+
nonce: DUMMY_CAMPAIGN.channel.nonce,
1492+
};
1493+
let mut campaign_new_follower = DUMMY_CAMPAIGN.clone();
1494+
campaign_new_follower.id = CampaignId::new();
1495+
campaign_new_follower.channel = channel_new_follower;
1496+
campaign_new_follower.validators =
1497+
Validators::new((DUMMY_VALIDATOR_LEADER.clone(), dummy_follower_2.clone()));
1498+
campaign_new_follower.created = Utc.ymd(2021, 2, 1).and_hms(9, 0, 0);
1499+
1500+
// Setting up a channel and campaign which use the new leader and follower on Ganache #1
1501+
let channel_new_leader_and_follower = Channel {
1502+
leader: IDS[&*LEADER_2],
1503+
follower: IDS[&*GUARDIAN],
1504+
guardian: *GUARDIAN,
1505+
token: chain_1_token,
1506+
nonce: DUMMY_CAMPAIGN.channel.nonce,
1507+
};
1508+
let mut campaign_new_leader_and_follower = DUMMY_CAMPAIGN.clone();
1509+
campaign_new_leader_and_follower.id = CampaignId::new();
1510+
campaign_new_leader_and_follower.channel = channel_new_leader_and_follower;
1511+
campaign_new_leader_and_follower.validators =
1512+
Validators::new((dummy_leader_2.clone(), dummy_follower_2.clone()));
1513+
campaign_new_leader_and_follower.created = Utc.ymd(2021, 2, 1).and_hms(10, 0, 0);
1514+
1515+
insert_channel(&app.pool, DUMMY_CAMPAIGN.channel)
1516+
.await
1517+
.expect("Should insert dummy channel");
1518+
insert_campaign(&app.pool, &DUMMY_CAMPAIGN)
1519+
.await
1520+
.expect("Should insert dummy campaign");
1521+
insert_channel(&app.pool, channel_new_leader)
1522+
.await
1523+
.expect("Should insert dummy channel");
1524+
insert_campaign(&app.pool, &campaign_new_leader)
1525+
.await
1526+
.expect("Should insert dummy campaign");
1527+
insert_channel(&app.pool, channel_new_follower)
1528+
.await
1529+
.expect("Should insert dummy channel");
1530+
insert_campaign(&app.pool, &campaign_new_follower)
1531+
.await
1532+
.expect("Should insert dummy campaign");
1533+
insert_channel(&app.pool, channel_new_leader_and_follower)
1534+
.await
1535+
.expect("Should insert dummy channel");
1536+
insert_campaign(&app.pool, &campaign_new_leader_and_follower)
1537+
.await
1538+
.expect("Should insert dummy campaign");
1539+
1540+
let mut campaign_other_creator = DUMMY_CAMPAIGN.clone();
1541+
campaign_other_creator.id = CampaignId::new();
1542+
campaign_other_creator.creator = *PUBLISHER_2;
1543+
campaign_other_creator.created = Utc.ymd(2021, 2, 1).and_hms(11, 0, 0);
1544+
1545+
insert_campaign(&app.pool, &campaign_other_creator)
1546+
.await
1547+
.expect("Should insert dummy campaign");
1548+
1549+
let mut campaign_long_active_to = DUMMY_CAMPAIGN.clone();
1550+
campaign_long_active_to.id = CampaignId::new();
1551+
campaign_long_active_to.active.to = Utc.ymd(2101, 1, 30).and_hms(0, 0, 0);
1552+
campaign_long_active_to.created = Utc.ymd(2021, 2, 1).and_hms(12, 0, 0);
1553+
1554+
insert_campaign(&app.pool, &campaign_long_active_to)
1555+
.await
1556+
.expect("Should insert dummy campaign");
1557+
1558+
let build_request = |query: CampaignListQuery| {
1559+
let query = serde_urlencoded::to_string(query).expect("should parse query");
1560+
Request::builder()
1561+
.uri(format!("http://127.0.0.1/v5/campaign/list?{}", query))
1562+
.body(Body::empty())
1563+
.expect("Should build Request")
1564+
};
1565+
1566+
// Test for dummy leader
1567+
{
1568+
let query = CampaignListQuery {
1569+
page: 0,
1570+
active_to_ge: Utc::now(),
1571+
creator: None,
1572+
validator: Some(ValidatorParam::Leader(DUMMY_VALIDATOR_LEADER.id)),
1573+
};
1574+
let res = campaign_list(build_request(query), &app)
1575+
.await
1576+
.expect("should get campaigns");
1577+
let res = res_to_campaign_list_response(res).await;
1578+
1579+
assert_eq!(
1580+
res.campaigns,
1581+
vec![DUMMY_CAMPAIGN.clone(), campaign_new_follower.clone()],
1582+
"First page of campaigns with dummy leader is correct"
1583+
);
1584+
assert_eq!(res.pagination.total_pages, 2);
1585+
1586+
let query = CampaignListQuery {
1587+
page: 1,
1588+
active_to_ge: Utc::now(),
1589+
creator: None,
1590+
validator: Some(ValidatorParam::Leader(DUMMY_VALIDATOR_LEADER.id)),
1591+
};
1592+
let res = campaign_list(build_request(query), &app)
1593+
.await
1594+
.expect("should get campaigns");
1595+
let res = res_to_campaign_list_response(res).await;
1596+
1597+
assert_eq!(
1598+
res.campaigns,
1599+
vec![
1600+
campaign_other_creator.clone(),
1601+
campaign_long_active_to.clone()
1602+
],
1603+
"Second page of campaigns with dummy leader is correct"
1604+
);
1605+
}
1606+
1607+
// Test for dummy follower
1608+
{
1609+
let query = CampaignListQuery {
1610+
page: 0,
1611+
active_to_ge: Utc::now(),
1612+
creator: None,
1613+
validator: Some(ValidatorParam::Validator(DUMMY_VALIDATOR_FOLLOWER.id)),
1614+
};
1615+
let res = campaign_list(build_request(query), &app)
1616+
.await
1617+
.expect("should get campaigns");
1618+
let res = res_to_campaign_list_response(res).await;
1619+
1620+
assert_eq!(
1621+
res.campaigns,
1622+
vec![DUMMY_CAMPAIGN.clone(), campaign_new_leader.clone()],
1623+
"First page of campaigns with dummy follower is correct"
1624+
);
1625+
assert_eq!(res.pagination.total_pages, 2);
1626+
1627+
let query = CampaignListQuery {
1628+
page: 1,
1629+
active_to_ge: Utc::now(),
1630+
creator: None,
1631+
validator: Some(ValidatorParam::Validator(DUMMY_VALIDATOR_FOLLOWER.id)),
1632+
};
1633+
let res = campaign_list(build_request(query), &app)
1634+
.await
1635+
.expect("should get campaigns");
1636+
let res = res_to_campaign_list_response(res).await;
1637+
1638+
assert_eq!(
1639+
res.campaigns,
1640+
vec![
1641+
campaign_other_creator.clone(),
1642+
campaign_long_active_to.clone()
1643+
],
1644+
"Second page of campaigns with dummy follower is correct"
1645+
);
1646+
}
1647+
1648+
// Test for dummy leader 2
1649+
{
1650+
let query = CampaignListQuery {
1651+
page: 0,
1652+
active_to_ge: Utc::now(),
1653+
creator: None,
1654+
validator: Some(ValidatorParam::Leader(dummy_leader_2.id)),
1655+
};
1656+
let res = campaign_list(build_request(query), &app)
1657+
.await
1658+
.expect("should get campaigns");
1659+
let res = res_to_campaign_list_response(res).await;
1660+
1661+
assert_eq!(
1662+
res.campaigns,
1663+
vec![
1664+
campaign_new_leader.clone(),
1665+
campaign_new_leader_and_follower.clone()
1666+
],
1667+
"Campaigns with dummy leader 2 are correct"
1668+
);
1669+
assert_eq!(res.pagination.total_pages, 1);
1670+
}
1671+
1672+
// Test for dummy follower 2
1673+
{
1674+
let query = CampaignListQuery {
1675+
page: 0,
1676+
active_to_ge: Utc::now(),
1677+
creator: None,
1678+
validator: Some(ValidatorParam::Validator(dummy_follower_2.id)),
1679+
};
1680+
let res = campaign_list(build_request(query), &app)
1681+
.await
1682+
.expect("should get campaigns");
1683+
let res = res_to_campaign_list_response(res).await;
1684+
1685+
assert_eq!(
1686+
res.campaigns,
1687+
vec![
1688+
campaign_new_follower.clone(),
1689+
campaign_new_leader_and_follower.clone()
1690+
],
1691+
"Campaigns with dummy follower 2 are correct"
1692+
);
1693+
assert_eq!(res.pagination.total_pages, 1);
1694+
}
1695+
1696+
// Test for other creator
1697+
{
1698+
let query = CampaignListQuery {
1699+
page: 0,
1700+
active_to_ge: Utc::now(),
1701+
creator: Some(*PUBLISHER_2),
1702+
validator: None,
1703+
};
1704+
let res = campaign_list(build_request(query), &app)
1705+
.await
1706+
.expect("should get campaigns");
1707+
let res = res_to_campaign_list_response(res).await;
1708+
1709+
assert_eq!(
1710+
res.campaigns,
1711+
vec![campaign_other_creator.clone()],
1712+
"The campaign with a different creator is retrieved correctly"
1713+
);
1714+
assert_eq!(res.pagination.total_pages, 1);
1715+
}
1716+
1717+
// Test for active_to
1718+
{
1719+
let query = CampaignListQuery {
1720+
page: 0,
1721+
active_to_ge: Utc.ymd(2101, 1, 1).and_hms(0, 0, 0),
1722+
creator: None,
1723+
validator: None,
1724+
};
1725+
let res = campaign_list(build_request(query), &app)
1726+
.await
1727+
.expect("should get campaigns");
1728+
let res = res_to_campaign_list_response(res).await;
1729+
1730+
assert_eq!(
1731+
res.campaigns,
1732+
vec![campaign_long_active_to.clone()],
1733+
"The campaign with a longer active_to is retrieved correctly"
1734+
);
1735+
assert_eq!(res.pagination.total_pages, 1);
1736+
}
1737+
}
14301738
}

0 commit comments

Comments
 (0)