@@ -7844,7 +7844,202 @@ BOOST_FIXTURE_TEST_SUITE(operation_tests, clean_database_fixture)
78447844
78457845 BOOST_AUTO_TEST_SUITE_END () // comment_curation_rewards_percent
78467846
7847- BOOST_AUTO_TEST_SUITE_END()
7847+ BOOST_AUTO_TEST_SUITE(vote_options) // vote_options
7848+
7849+ BOOST_AUTO_TEST_CASE(vote_options_authorities) { try {
7850+ BOOST_TEST_MESSAGE (" Testing: vote_options_authorities" );
7851+
7852+ vote_options_operation op;
7853+ op.voter = " bob" ;
7854+ op.author = " alice" ;
7855+ op.permlink = " test" ;
7856+ CHECK_OP_AUTHS (op, account_name_set (), account_name_set (), account_name_set ({" bob" }));
7857+ } FC_LOG_AND_RETHROW () }
7858+
7859+ BOOST_AUTO_TEST_CASE (vote_options_validate) { try {
7860+ BOOST_TEST_MESSAGE (" Testing: vote_options_validate" );
7861+
7862+ BOOST_TEST_MESSAGE (" -- Normal case" );
7863+
7864+ vote_options_operation op;
7865+ op.voter = " bob" ;
7866+ op.author = " alice" ;
7867+ op.permlink = " test" ;
7868+ CHECK_OP_VALID (op);
7869+
7870+ BOOST_TEST_MESSAGE (" -- Incorrect account or permlink case" );
7871+
7872+ CHECK_PARAM_INVALID (op, voter, " " );
7873+ CHECK_PARAM_INVALID (op, author, " " );
7874+ CHECK_PARAM_INVALID (op, permlink, std::string (STEEMIT_MAX_PERMLINK_LENGTH +1 , ' ' ));
7875+
7876+ } FC_LOG_AND_RETHROW () }
7877+
7878+ BOOST_AUTO_TEST_CASE (author_promote_rate_validate) { try {
7879+ BOOST_TEST_MESSAGE (" Testing: author_promote_rate_validate" );
7880+
7881+ vote_options_operation op;
7882+ op.voter = " bob" ;
7883+ op.author = " alice" ;
7884+ op.permlink = " test" ;
7885+
7886+ BOOST_TEST_MESSAGE (" -- Normal case with author_promote_rate" );
7887+
7888+ vote_options_extensions_type op_exts;
7889+ op_exts.insert (vote_author_promote_rate (0 ));
7890+ CHECK_PARAM_VALID (op, extensions, op_exts);
7891+
7892+ op_exts.clear ();
7893+ op_exts.insert (vote_author_promote_rate (STEEMIT_100_PERCENT ));
7894+ CHECK_PARAM_VALID (op, extensions, op_exts);
7895+
7896+ BOOST_TEST_MESSAGE (" -- author_promote_rate < 0" );
7897+
7898+ op.extensions .clear ();
7899+ op.extensions .insert (vote_author_promote_rate (-1 ));
7900+ GOLOS_CHECK_ERROR_PROPS (op.validate (),
7901+ CHECK_ERROR (invalid_parameter, " rate" ));
7902+
7903+ BOOST_TEST_MESSAGE (" -- author_promote_rate > 100%" );
7904+
7905+ op.extensions .clear ();
7906+ op.extensions .insert (vote_author_promote_rate (STEEMIT_100_PERCENT +1 ));
7907+ GOLOS_CHECK_ERROR_PROPS (op.validate (),
7908+ CHECK_ERROR (invalid_parameter, " rate" ));
7909+
7910+ } FC_LOG_AND_RETHROW () }
7911+
7912+ BOOST_AUTO_TEST_CASE (vote_options_apply) { try {
7913+ BOOST_TEST_MESSAGE (" Testing: vote_options_apply" );
7914+
7915+ signed_transaction tx;
7916+ ACTORS ((alice)(bob))
7917+ fund (" alice" , 10000 );
7918+ vest (" alice" , 10000 );
7919+ fund (" bob" , 10000 );
7920+ vest (" bob" , 10000 );
7921+ generate_block ();
7922+
7923+ BOOST_TEST_MESSAGE (" --- Testing without comment" );
7924+
7925+ vote_options_operation op;
7926+ op.voter = " bob" ;
7927+ op.author = " alice" ;
7928+ op.permlink = " alice-test" ;
7929+
7930+ GOLOS_CHECK_ERROR_MISSING (comment, make_comment_id (" alice" , " alice-test" ), bob_private_key, op);
7931+
7932+ BOOST_TEST_MESSAGE (" --- Creating comment" );
7933+
7934+ comment_create (" alice" , alice_private_key, " alice-test" , " " , " alice-test" );
7935+ generate_block ();
7936+
7937+ BOOST_TEST_MESSAGE (" --- Testing without vote" );
7938+
7939+ GOLOS_CHECK_ERROR_MISSING (comment_vote_object, fc::mutable_variant_object ()(" voter" ,op.voter )(" author" ,op.author )(" permlink" ,op.permlink ),
7940+ bob_private_key, op);
7941+
7942+ BOOST_TEST_MESSAGE (" --- Voting for comment" );
7943+
7944+ vote_operation vote_op;
7945+ vote_op.voter = " bob" ;
7946+ vote_op.author = " alice" ;
7947+ vote_op.permlink = " alice-test" ;
7948+ vote_op.weight = 1000 ;
7949+ BOOST_CHECK_NO_THROW (push_tx_with_ops (tx, bob_private_key, vote_op));
7950+ generate_block ();
7951+
7952+ BOOST_TEST_MESSAGE (" --- Normal call without extensions" );
7953+
7954+ BOOST_CHECK_NO_THROW (push_tx_with_ops (tx, bob_private_key, op));
7955+ generate_block ();
7956+
7957+ validate_database ();
7958+ } FC_LOG_AND_RETHROW () }
7959+
7960+ BOOST_AUTO_TEST_CASE (author_promote_rate_apply) { try {
7961+ BOOST_TEST_MESSAGE (" Testing: author_promote_rate_apply" );
7962+
7963+ signed_transaction tx;
7964+ ACTORS ((alice)(bob))
7965+ fund (" alice" , 10000 );
7966+ vest (" alice" , 10000 );
7967+ fund (" bob" , 10000 );
7968+ vest (" bob" , 10000 );
7969+ generate_block ();
7970+
7971+ auto & wso = db->get_witness_schedule_object ();
7972+ BOOST_CHECK_EQUAL (wso.median_props .min_vote_author_promote_rate , GOLOS_MIN_VOTE_AUTHOR_PROMOTE_RATE );
7973+ BOOST_CHECK_EQUAL (wso.median_props .max_vote_author_promote_rate , GOLOS_MAX_VOTE_AUTHOR_PROMOTE_RATE );
7974+
7975+ set_price_feed (price (ASSET (" 1.000 GOLOS" ), ASSET (" 1.000 GBG" )));
7976+
7977+ BOOST_TEST_MESSAGE (" --- Creating comment and voting for it" );
7978+
7979+ comment_create (" alice" , alice_private_key, " alice-test" , " " , " alice-test" );
7980+ generate_block ();
7981+ vote_operation vote_op;
7982+ vote_op.voter = " bob" ;
7983+ vote_op.author = " alice" ;
7984+ vote_op.permlink = " alice-test" ;
7985+ vote_op.weight = 1000 ;
7986+ BOOST_CHECK_NO_THROW (push_tx_with_ops (tx, bob_private_key, vote_op));
7987+ generate_block ();
7988+
7989+ {
7990+ auto vote = db->get <comment_vote_object, by_comment_voter>(std::make_tuple (db->get_comment (" alice" , string (" alice-test" )).id , db->get_account (" bob" ).id ));
7991+ BOOST_CHECK_EQUAL (vote.author_promote_rate , wso.median_props .min_vote_author_promote_rate );
7992+ }
7993+
7994+ BOOST_TEST_MESSAGE (" --- Testing with normal value" );
7995+
7996+ vote_options_operation op;
7997+ op.voter = " bob" ;
7998+ op.author = " alice" ;
7999+ op.permlink = " alice-test" ;
8000+ vote_author_promote_rate vapr (25 * STEEMIT_1_PERCENT );
8001+ op.extensions .insert (vapr);
8002+ BOOST_CHECK_NO_THROW (push_tx_with_ops (tx, bob_private_key, op));
8003+ generate_block ();
8004+ {
8005+ auto vote = db->get <comment_vote_object, by_comment_voter>(std::make_tuple (db->get_comment (" alice" , string (" alice-test" )).id , db->get_account (" bob" ).id ));
8006+ BOOST_CHECK_EQUAL (vote.author_promote_rate , vapr.rate );
8007+ }
8008+
8009+ BOOST_TEST_MESSAGE (" --- Checking that calling without extensions don't affect value" );
8010+
8011+ op.extensions .clear ();
8012+ BOOST_CHECK_NO_THROW (push_tx_with_ops (tx, bob_private_key, op));
8013+ generate_block ();
8014+ {
8015+ auto vote = db->get <comment_vote_object, by_comment_voter>(std::make_tuple (db->get_comment (" alice" , string (" alice-test" )).id , db->get_account (" bob" ).id ));
8016+ BOOST_CHECK_EQUAL (vote.author_promote_rate , vapr.rate );
8017+ }
8018+
8019+ BOOST_TEST_MESSAGE (" --- Starting rewards" );
8020+
8021+ generate_blocks (db->get_comment (" alice" , string (" alice-test" )).cashout_time - STEEMIT_BLOCK_INTERVAL , false );
8022+
8023+ comment_fund total_comment_fund (*db);
8024+ comment_reward alice_comment_reward (*db, total_comment_fund, db->get_comment (" alice" , string (" alice-test" )));
8025+
8026+ generate_block ();
8027+
8028+ BOOST_TEST_MESSAGE (" --- Checking rewards" );
8029+
8030+ auto & bob_account = db->get_account (" bob" );
8031+ auto cur_op = get_last_operations<curation_reward_operation>(1 )[0 ];
8032+ BOOST_CHECK_EQUAL (cur_op.reward , alice_comment_reward.vote_payout (bob_account));
8033+ auto author_op = get_last_operations<author_reward_operation>(1 )[0 ];
8034+ BOOST_CHECK_EQUAL (author_op.sbd_payout , alice_comment_reward.sbd_payout ());
8035+ BOOST_CHECK_EQUAL (author_op.vesting_payout , alice_comment_reward.vesting_payout ());
8036+
8037+ validate_database ();
8038+ } FC_LOG_AND_RETHROW () }
8039+
8040+ BOOST_AUTO_TEST_SUITE_END () // vote_options
8041+
8042+ BOOST_AUTO_TEST_SUITE_END() // operation_tests
78488043
78498044
78508045struct votes_extended_fixture : public golos::chain::clean_database_fixture {
0 commit comments