@@ -997,10 +997,17 @@ mod test {
997
997
use crate :: test_util:: setup_dummy_app;
998
998
use crate :: update_campaign:: DeltaBudget ;
999
999
use adapter:: primitives:: Deposit ;
1000
+ use chrono:: { TimeZone , Utc } ;
1000
1001
use hyper:: StatusCode ;
1001
1002
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 ,
1004
1011
} ;
1005
1012
1006
1013
#[ tokio:: test]
@@ -1427,4 +1434,305 @@ mod test {
1427
1434
) ;
1428
1435
}
1429
1436
}
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
+ }
1430
1738
}
0 commit comments