diff --git a/packages/packages.json b/packages/packages.json index b190dd212..01f458c42 100644 --- a/packages/packages.json +++ b/packages/packages.json @@ -15,15 +15,15 @@ "contract/valory/mech_activity/0.1.0": "bafybeiec6nnvfs6captlncrtjfygpp275vkfajvj4frrnab7thsca6337e", "contract/valory/staking_token/0.1.0": "bafybeig4fl35dn7d5gnprux2nwsqbirm7zkiujz3xvrwcjuktz6hkq4as4", "contract/valory/relayer/0.1.0": "bafybeihzgjyvhtorugjw3yldznqsbwo3aqpxowm7k2nrvj6qtwpsc7jl7u", - "skill/valory/market_manager_abci/0.1.0": "bafybeiai6djelf6d4dkxgkv46l24q2gz7736b3jdhbxslvcydpvnvrse6e", - "skill/valory/decision_maker_abci/0.1.0": "bafybeigh2ajmwscmgvl3t4wkwyeclszs5ujykm5omget7yap7zmwironkq", - "skill/valory/trader_abci/0.1.0": "bafybeifjeeulkss2c4dnhzs24u63556w2vq3xxbfykxn7hcl7wirwvjqcq", - "skill/valory/tx_settlement_multiplexer_abci/0.1.0": "bafybeibyverkghpxz7di3wgxdixwcofrxec35b4tb4ac5pebpseax76eby", + "skill/valory/market_manager_abci/0.1.0": "bafybeicymkyk7e5rohauml6xazai6mv2rqd3euz3ifbk2ftfkylhpgo4ra", + "skill/valory/decision_maker_abci/0.1.0": "bafybeicr3o4z5ytp6njmsxlj3p6cbaxyad6tdv5kyoxaeon5da2wn6hxqy", + "skill/valory/trader_abci/0.1.0": "bafybeigpelxc6kppckpx4phewwyi24mejyz54fi6g5i7swnm3xi2x5olve", + "skill/valory/tx_settlement_multiplexer_abci/0.1.0": "bafybeibgzwhazshodynrpsowbnvy7awtl6vgzrf3yunvicgrha4hfzbsi4", "skill/valory/staking_abci/0.1.0": "bafybeiduborfqevheegy3plk7bzhkl4fukwixvlb57tenijdepintubbdi", "skill/valory/check_stop_trading_abci/0.1.0": "bafybeiat5hmo6i2r6t6ufyfnidvepixmbnppotdmztu4dad5j4hiewdh64", - "agent/valory/trader/0.1.0": "bafybeibwds53c4mtfnrymruw56o4nzmtv4zwu7nbhbxi7ix2ra4izk6tx4", - "service/valory/trader/0.1.0": "bafybeigwmrak2lnnzjx3o3la6jaxgp7tlm4wr4lks3movgveqgvwou7s7a", - "service/valory/trader_pearl/0.1.0": "bafybeigwl2i45vuovylfaymuid73x4c2efwkwcbau7dthv3k7raohfgqqy" + "agent/valory/trader/0.1.0": "bafybeibj2ezsqdnqa5kcwnhv5ke6z6fgspfxlewnkakz5ci73nmen43cpe", + "service/valory/trader/0.1.0": "bafybeibocmmtkoqnx2k4uhovfzk563ki7onukirkpex7pjnwwaesilqf7a", + "service/valory/trader_pearl/0.1.0": "bafybeigin5i6pvy4mwcgarcna2xetlhrofnnj4l7fbfiirrecpzvn3vshe" }, "third_party": { "protocol/open_aea/signing/1.0.0": "bafybeihv62fim3wl2bayavfcg3u5e5cxu3b7brtu4cn5xoxd6lqwachasi", diff --git a/packages/valory/agents/trader/aea-config.yaml b/packages/valory/agents/trader/aea-config.yaml index e729218cf..b573664c2 100644 --- a/packages/valory/agents/trader/aea-config.yaml +++ b/packages/valory/agents/trader/aea-config.yaml @@ -47,10 +47,10 @@ skills: - valory/reset_pause_abci:0.1.0:bafybeiameewywqigpupy3u2iwnkfczeiiucue74x2l5lbge74rmw6bgaie - valory/termination_abci:0.1.0:bafybeif2zim2de356eo3sipkmoev5emwadpqqzk3huwqarywh4tmqt3vzq - valory/transaction_settlement_abci:0.1.0:bafybeic3tccdjypuge2lewtlgprwkbb53lhgsgn7oiwzyrcrrptrbeyote -- valory/tx_settlement_multiplexer_abci:0.1.0:bafybeibyverkghpxz7di3wgxdixwcofrxec35b4tb4ac5pebpseax76eby -- valory/market_manager_abci:0.1.0:bafybeiai6djelf6d4dkxgkv46l24q2gz7736b3jdhbxslvcydpvnvrse6e -- valory/decision_maker_abci:0.1.0:bafybeigh2ajmwscmgvl3t4wkwyeclszs5ujykm5omget7yap7zmwironkq -- valory/trader_abci:0.1.0:bafybeifjeeulkss2c4dnhzs24u63556w2vq3xxbfykxn7hcl7wirwvjqcq +- valory/tx_settlement_multiplexer_abci:0.1.0:bafybeibgzwhazshodynrpsowbnvy7awtl6vgzrf3yunvicgrha4hfzbsi4 +- valory/market_manager_abci:0.1.0:bafybeicymkyk7e5rohauml6xazai6mv2rqd3euz3ifbk2ftfkylhpgo4ra +- valory/decision_maker_abci:0.1.0:bafybeicr3o4z5ytp6njmsxlj3p6cbaxyad6tdv5kyoxaeon5da2wn6hxqy +- valory/trader_abci:0.1.0:bafybeigpelxc6kppckpx4phewwyi24mejyz54fi6g5i7swnm3xi2x5olve - valory/staking_abci:0.1.0:bafybeiduborfqevheegy3plk7bzhkl4fukwixvlb57tenijdepintubbdi - valory/check_stop_trading_abci:0.1.0:bafybeiat5hmo6i2r6t6ufyfnidvepixmbnppotdmztu4dad5j4hiewdh64 - valory/mech_interact_abci:0.1.0:bafybeih2cck5xu6yaibomwtm5zbcp6llghr3ighdnk56fzwu3ihu5xx35e diff --git a/packages/valory/services/trader/service.yaml b/packages/valory/services/trader/service.yaml index 4957ba9fa..bd0a928fe 100644 --- a/packages/valory/services/trader/service.yaml +++ b/packages/valory/services/trader/service.yaml @@ -7,7 +7,7 @@ license: Apache-2.0 fingerprint: README.md: bafybeigtuothskwyvrhfosps2bu6suauycolj67dpuxqvnicdrdu7yhtvq fingerprint_ignore_patterns: [] -agent: valory/trader:0.1.0:bafybeibwds53c4mtfnrymruw56o4nzmtv4zwu7nbhbxi7ix2ra4izk6tx4 +agent: valory/trader:0.1.0:bafybeibj2ezsqdnqa5kcwnhv5ke6z6fgspfxlewnkakz5ci73nmen43cpe number_of_agents: 4 deployment: agent: diff --git a/packages/valory/services/trader_pearl/service.yaml b/packages/valory/services/trader_pearl/service.yaml index b427fa875..540be3783 100644 --- a/packages/valory/services/trader_pearl/service.yaml +++ b/packages/valory/services/trader_pearl/service.yaml @@ -8,7 +8,7 @@ license: Apache-2.0 fingerprint: README.md: bafybeibg7bdqpioh4lmvknw3ygnllfku32oca4eq5pqtvdrdsgw6buko7e fingerprint_ignore_patterns: [] -agent: valory/trader:0.1.0:bafybeibwds53c4mtfnrymruw56o4nzmtv4zwu7nbhbxi7ix2ra4izk6tx4 +agent: valory/trader:0.1.0:bafybeibj2ezsqdnqa5kcwnhv5ke6z6fgspfxlewnkakz5ci73nmen43cpe number_of_agents: 1 deployment: agent: diff --git a/packages/valory/skills/decision_maker_abci/skill.yaml b/packages/valory/skills/decision_maker_abci/skill.yaml index 786f8208d..eb00cdd54 100644 --- a/packages/valory/skills/decision_maker_abci/skill.yaml +++ b/packages/valory/skills/decision_maker_abci/skill.yaml @@ -85,7 +85,7 @@ protocols: - valory/http:1.0.0:bafybeifugzl63kfdmwrxwphrnrhj7bn6iruxieme3a4ntzejf6kmtuwmae skills: - valory/abstract_round_abci:0.1.0:bafybeiar2yhzxacfe3qqamqhaihtlcimquwedffctw55sowx6rac3cm3ui -- valory/market_manager_abci:0.1.0:bafybeiai6djelf6d4dkxgkv46l24q2gz7736b3jdhbxslvcydpvnvrse6e +- valory/market_manager_abci:0.1.0:bafybeicymkyk7e5rohauml6xazai6mv2rqd3euz3ifbk2ftfkylhpgo4ra - valory/transaction_settlement_abci:0.1.0:bafybeic3tccdjypuge2lewtlgprwkbb53lhgsgn7oiwzyrcrrptrbeyote - valory/mech_interact_abci:0.1.0:bafybeih2cck5xu6yaibomwtm5zbcp6llghr3ighdnk56fzwu3ihu5xx35e behaviours: diff --git a/packages/valory/skills/market_manager_abci/rounds.py b/packages/valory/skills/market_manager_abci/rounds.py index 1ac6ea310..ba8a16e44 100644 --- a/packages/valory/skills/market_manager_abci/rounds.py +++ b/packages/valory/skills/market_manager_abci/rounds.py @@ -66,7 +66,7 @@ def bets_hash(self) -> str: @property def participant_to_bets_hash(self) -> DeserializedCollection: """Get the participants to bets' hash.""" - return self._get_deserialized("participant_to_bets") + return self._get_deserialized("participant_to_bets_hash") class MarketManagerAbstractRound(AbstractRound[Event], ABC): diff --git a/packages/valory/skills/market_manager_abci/skill.yaml b/packages/valory/skills/market_manager_abci/skill.yaml index ea81341a8..0f1a57752 100644 --- a/packages/valory/skills/market_manager_abci/skill.yaml +++ b/packages/valory/skills/market_manager_abci/skill.yaml @@ -24,10 +24,12 @@ fingerprint: handlers.py: bafybeihot2i2yvfkz2gcowvt66wdu6tkjbmv7hsmc4jzt4reqeaiuphbtu models.py: bafybeibjttnga54y4auz6f33ecfrngyw53b2xzpompm72drjsr4xoytmiy payloads.py: bafybeicfymvvtdpkcgmkvthfzmb7dqakepkzslqrz6rcs7nxkz7qq3mrzy - rounds.py: bafybeigdwc4sr7gvxth4suaz36x7fmrn3jhlertwq4rcch4clyuxq435wa + rounds.py: bafybeiflb2k6ritv5tlexlfxyg2okadtviijprqnc7sa7zxdlhr7nnqxfy tests/__init__.py: bafybeigaewntxawezvygss345kytjijo56bfwddjtfm6egzxfajsgojam4 + tests/test_dialogues.py: bafybeiet646su5nsjmvruahuwg6un4uvwzyj2lnn2jvkye6cxooz22f3ja tests/test_handlers.py: bafybeiaz3idwevvlplcyieaqo5oeikuthlte6e2gi4ajw452ylvimwgiki tests/test_payloads.py: bafybeidvld43p5c4wpwi7m6rfzontkheqqgxdchjnme5b54wmldojc5dmm + tests/test_rounds.py: bafybeidahkavof43y3o4omnihh6yxdx7gqofio7kzukdydymxbebylempu fingerprint_ignore_patterns: [] connections: [] contracts: [] diff --git a/packages/valory/skills/market_manager_abci/tests/test_dialogues.py b/packages/valory/skills/market_manager_abci/tests/test_dialogues.py new file mode 100644 index 000000000..cdcfd1185 --- /dev/null +++ b/packages/valory/skills/market_manager_abci/tests/test_dialogues.py @@ -0,0 +1,28 @@ +# -*- coding: utf-8 -*- +# ------------------------------------------------------------------------------ +# +# Copyright 2021-2024 Valory AG +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# ------------------------------------------------------------------------------ + +"""Test the dialogues.py module of the skill.""" + +# pylint: skip-file + +import packages.valory.skills.market_manager_abci.dialogues # noqa + + +def test_import() -> None: + """Test that the 'dialogues.py' Python module can be imported.""" diff --git a/packages/valory/skills/market_manager_abci/tests/test_rounds.py b/packages/valory/skills/market_manager_abci/tests/test_rounds.py new file mode 100644 index 000000000..33b184c69 --- /dev/null +++ b/packages/valory/skills/market_manager_abci/tests/test_rounds.py @@ -0,0 +1,324 @@ +# -*- coding: utf-8 -*- +# ------------------------------------------------------------------------------ +# +# Copyright 2024 Valory AG +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# ------------------------------------------------------------------------------ + +"""This module contains the test for rounds for the MarketManager ABCI application.""" + +import json +from dataclasses import dataclass, field +from typing import ( + Any, + Callable, + Dict, + FrozenSet, + Hashable, + List, + Mapping, + Optional, + Union, +) +from unittest import mock +from unittest.mock import MagicMock, patch + +import pytest + +from packages.valory.skills.abstract_round_abci.base import ( + AbciAppDB, + BaseTxPayload, + get_name, +) +from packages.valory.skills.abstract_round_abci.test_tools.rounds import ( + BaseCollectSameUntilThresholdRoundTest, +) +from packages.valory.skills.market_manager_abci.payloads import UpdateBetsPayload +from packages.valory.skills.market_manager_abci.rounds import ( + Event, + FailedMarketManagerRound, + FinishedMarketManagerRound, + MarketManagerAbciApp, + SynchronizedData, + UpdateBetsRound, +) + + +@pytest.fixture +def abci_app() -> MarketManagerAbciApp: + """Fixture for MarketManagerAbciApp.""" + # Create mocks for the required parameters + synchronized_data = MagicMock() + logger = MagicMock() + context = MagicMock() + + # Instantiate MarketManagerAbciApp with the required arguments + return MarketManagerAbciApp( + synchronized_data=synchronized_data, logger=logger, context=context + ) + + +DUMMY_BETS_HASH = "dummy_bets_hash" +DUMMY_PARTICIPANT_TO_BETS_HASH = json.dumps( + { + "agent_0": "bet_1", + "agent_1": "bet_2", + "agent_2": "bet_3", + } +) + + +def get_participants() -> FrozenSet[str]: + """Participants""" + return frozenset([f"agent_{i}" for i in range(MAX_PARTICIPANTS)]) + + +def get_payloads( + data: Optional[str], +) -> Mapping[str, BaseTxPayload]: + """Get payloads.""" + return { + participant: UpdateBetsPayload(participant, data) + for participant in get_participants() + } + + +@dataclass +class RoundTestCase: + """RoundTestCase""" + + name: str + initial_data: Dict[str, Hashable] + payloads: Mapping[str, BaseTxPayload] + final_data: Dict[str, Hashable] + event: Event + most_voted_payload: Any + synchronized_data_attr_checks: List[Callable] = field(default_factory=list) + + +MAX_PARTICIPANTS: int = 4 + + +class BaseMarketManagerRoundTestClass(BaseCollectSameUntilThresholdRoundTest): + """Base test class for MarketManager rounds.""" + + synchronized_data: SynchronizedData + _synchronized_data_class = SynchronizedData + _event_class = Event + round_class = UpdateBetsRound + + def run_test(self, test_case: RoundTestCase) -> None: + """Run the test""" + + # Set initial data + self.synchronized_data.update( + self._synchronized_data_class, **test_case.initial_data + ) + + test_round = self.round_class( + synchronized_data=self.synchronized_data, context=mock.MagicMock() + ) + + self._complete_run( + self._test_round( + test_round=test_round, + round_payloads=test_case.payloads, + synchronized_data_update_fn=lambda sync_data, _: sync_data.update( + **test_case.final_data + ), + synchronized_data_attr_checks=test_case.synchronized_data_attr_checks, + most_voted_payload=test_case.most_voted_payload, + exit_event=test_case.event, + ) + ) + + +class TestUpdateBetsRound(BaseMarketManagerRoundTestClass): + """Tests for UpdateBetsRound.""" + + round_class = UpdateBetsRound + synchronized_data: SynchronizedData + _synchronized_data_class = SynchronizedData + _event_class = Event + + @pytest.mark.parametrize( + "test_case", + ( + RoundTestCase( + name="Happy path", + initial_data={}, + payloads=get_payloads( + data=DUMMY_BETS_HASH, + ), + final_data={ + "bets_hash": DUMMY_BETS_HASH, + "participant_to_bets_hash": DUMMY_PARTICIPANT_TO_BETS_HASH, + }, + event=Event.DONE, + most_voted_payload=DUMMY_BETS_HASH, + synchronized_data_attr_checks=[ + lambda synchronized_data: synchronized_data.bets_hash, + ], + ), + RoundTestCase( + name="Fetch error", + initial_data={}, + payloads=get_payloads( + data=None, + ), + final_data={}, + event=Event.FETCH_ERROR, + most_voted_payload=None, + synchronized_data_attr_checks=[], + ), + ), + ) + def test_run(self, test_case: RoundTestCase) -> None: + """Run tests.""" + + self.run_test(test_case) + + def test_return_no_majority_event(self) -> None: + """Test the _return_no_majority_event method.""" + # Mock synchronized data and create an instance of the round + synchronized_data = MagicMock(spec=SynchronizedData) + update_bets_round = UpdateBetsRound( + synchronized_data=synchronized_data, context=MagicMock() + ) + + # Call the method and check the results + result = update_bets_round._return_no_majority_event() + assert result == (synchronized_data, Event.NO_MAJORITY) + + +class TestFinishedMarketManagerRound: + """Tests for FinishedMarketManagerRound.""" + + def test_finished_market_manager_round_initialization(self) -> None: + """Test the initialization of FinishedMarketManagerRound.""" + round_ = FinishedMarketManagerRound( + synchronized_data=MagicMock(), context=MagicMock() + ) + assert isinstance(round_, FinishedMarketManagerRound) + + +class TestFailedMarketManagerRound: + """Tests for FailedMarketManagerRound.""" + + def test_failed_market_manager_round_initialization(self) -> None: + """Test the initialization of FailedMarketManagerRound.""" + round_ = FailedMarketManagerRound( + synchronized_data=MagicMock(), context=MagicMock() + ) + assert isinstance(round_, FailedMarketManagerRound) + + +def test_market_manager_abci_app_initialization(abci_app: MarketManagerAbciApp) -> None: + """Test the initialization of MarketManagerAbciApp.""" + assert abci_app.initial_round_cls is UpdateBetsRound + assert abci_app.final_states == { + FinishedMarketManagerRound, + FailedMarketManagerRound, + } + assert abci_app.transition_function == { + UpdateBetsRound: { + Event.DONE: FinishedMarketManagerRound, + Event.FETCH_ERROR: FailedMarketManagerRound, + Event.ROUND_TIMEOUT: UpdateBetsRound, + Event.NO_MAJORITY: UpdateBetsRound, + }, + FinishedMarketManagerRound: {}, + FailedMarketManagerRound: {}, + } + assert abci_app.event_to_timeout == {Event.ROUND_TIMEOUT: 30.0} + assert abci_app.db_pre_conditions == {UpdateBetsRound: set()} + assert abci_app.db_post_conditions == { + FinishedMarketManagerRound: {get_name(SynchronizedData.bets_hash)}, + FailedMarketManagerRound: set(), + } + + +# Mock serialized collections for different keys +DUMMY_PARTICIPANT_TO_BETS_HASH = json.dumps( + { + "agent_0": {"sender": "agent_0", "data": "bet_1"}, + "agent_1": {"sender": "agent_1", "data": "bet_2"}, + } +) +DUMMY_BETS_HASH = json.dumps({"bets_hash": "dummy_bets_hash"}) + +DUMMY_SERIALIZED_PARTICIPANT_TO_BETS_HASH = json.dumps(DUMMY_PARTICIPANT_TO_BETS_HASH) +DUMMY_SERIALIZED_BETS_HASH = json.dumps(DUMMY_BETS_HASH) + + +@pytest.mark.parametrize( + "key,serialized_data,expected_result,property_to_check", + [ + ( + "participant_to_bets_hash", + DUMMY_SERIALIZED_PARTICIPANT_TO_BETS_HASH, + json.loads(DUMMY_PARTICIPANT_TO_BETS_HASH), + "participant_to_bets_hash", + ), + ( + "bets_hash", + DUMMY_SERIALIZED_BETS_HASH, + json.loads(DUMMY_BETS_HASH), + "bets_hash", + ), + ], +) +@patch( + "packages.valory.skills.market_manager_abci.rounds.CollectionRound.deserialize_collection" +) +def test_synchronized_data_get_deserialized( + mock_deserialize_collection: MagicMock, + key: str, + serialized_data: str, + expected_result: Mapping[str, Any], + property_to_check: str, +) -> None: + """Test the _get_deserialized method and properties in SynchronizedData.""" + # Mock the db.get_strict to return the serialized data + mock_db = mock.MagicMock() + mock_db.get_strict.return_value = serialized_data + + # Initialize SynchronizedData with the mocked db + synchronized_data = SynchronizedData(db=mock_db) + + # Mock the deserialize_collection function to return the expected deserialized result + mock_deserialize_collection.return_value = expected_result + + deserialized_data: Union[str, Mapping[str, BaseTxPayload]] + if property_to_check == "participant_to_bets_hash": + deserialized_data = synchronized_data.participant_to_bets_hash + else: + deserialized_data = synchronized_data.bets_hash + + # Ensure that get_strict is called with the correct key + mock_db.get_strict.assert_called_once_with(key) + + # Ensure that deserialize_collection is called with the correct serialized data only for collection fields + if property_to_check == "participant_to_bets_hash": + mock_deserialize_collection.assert_called_once_with(serialized_data) + assert deserialized_data == expected_result + + +def test_synchronized_data_initialization() -> None: + """Test the initialization and attributes of SynchronizedData.""" + setup_data = {"test": ["test"]} + synchronized_data = SynchronizedData(db=AbciAppDB(setup_data=setup_data)) + + assert synchronized_data.db._data == {0: {"test": ["test"]}} diff --git a/packages/valory/skills/trader_abci/skill.yaml b/packages/valory/skills/trader_abci/skill.yaml index db01e5186..3a2e90685 100644 --- a/packages/valory/skills/trader_abci/skill.yaml +++ b/packages/valory/skills/trader_abci/skill.yaml @@ -26,9 +26,9 @@ skills: - valory/reset_pause_abci:0.1.0:bafybeiameewywqigpupy3u2iwnkfczeiiucue74x2l5lbge74rmw6bgaie - valory/transaction_settlement_abci:0.1.0:bafybeic3tccdjypuge2lewtlgprwkbb53lhgsgn7oiwzyrcrrptrbeyote - valory/termination_abci:0.1.0:bafybeif2zim2de356eo3sipkmoev5emwadpqqzk3huwqarywh4tmqt3vzq -- valory/market_manager_abci:0.1.0:bafybeiai6djelf6d4dkxgkv46l24q2gz7736b3jdhbxslvcydpvnvrse6e -- valory/decision_maker_abci:0.1.0:bafybeigh2ajmwscmgvl3t4wkwyeclszs5ujykm5omget7yap7zmwironkq -- valory/tx_settlement_multiplexer_abci:0.1.0:bafybeibyverkghpxz7di3wgxdixwcofrxec35b4tb4ac5pebpseax76eby +- valory/market_manager_abci:0.1.0:bafybeicymkyk7e5rohauml6xazai6mv2rqd3euz3ifbk2ftfkylhpgo4ra +- valory/decision_maker_abci:0.1.0:bafybeicr3o4z5ytp6njmsxlj3p6cbaxyad6tdv5kyoxaeon5da2wn6hxqy +- valory/tx_settlement_multiplexer_abci:0.1.0:bafybeibgzwhazshodynrpsowbnvy7awtl6vgzrf3yunvicgrha4hfzbsi4 - valory/staking_abci:0.1.0:bafybeiduborfqevheegy3plk7bzhkl4fukwixvlb57tenijdepintubbdi - valory/check_stop_trading_abci:0.1.0:bafybeiat5hmo6i2r6t6ufyfnidvepixmbnppotdmztu4dad5j4hiewdh64 - valory/mech_interact_abci:0.1.0:bafybeih2cck5xu6yaibomwtm5zbcp6llghr3ighdnk56fzwu3ihu5xx35e diff --git a/packages/valory/skills/tx_settlement_multiplexer_abci/skill.yaml b/packages/valory/skills/tx_settlement_multiplexer_abci/skill.yaml index 64d0f16e4..e97464c4a 100644 --- a/packages/valory/skills/tx_settlement_multiplexer_abci/skill.yaml +++ b/packages/valory/skills/tx_settlement_multiplexer_abci/skill.yaml @@ -23,7 +23,7 @@ protocols: - valory/ledger_api:1.0.0:bafybeihdk6psr4guxmbcrc26jr2cbgzpd5aljkqvpwo64bvaz7tdti2oni skills: - valory/abstract_round_abci:0.1.0:bafybeiar2yhzxacfe3qqamqhaihtlcimquwedffctw55sowx6rac3cm3ui -- valory/decision_maker_abci:0.1.0:bafybeigh2ajmwscmgvl3t4wkwyeclszs5ujykm5omget7yap7zmwironkq +- valory/decision_maker_abci:0.1.0:bafybeicr3o4z5ytp6njmsxlj3p6cbaxyad6tdv5kyoxaeon5da2wn6hxqy - valory/staking_abci:0.1.0:bafybeiduborfqevheegy3plk7bzhkl4fukwixvlb57tenijdepintubbdi - valory/mech_interact_abci:0.1.0:bafybeih2cck5xu6yaibomwtm5zbcp6llghr3ighdnk56fzwu3ihu5xx35e behaviours: diff --git a/tox.ini b/tox.ini index 9671ff90a..1d83e9988 100644 --- a/tox.ini +++ b/tox.ini @@ -99,10 +99,12 @@ commands = autonomy init --reset --author ci --remote --ipfs --ipfs-node "/dns/registry.autonolas.tech/tcp/443/https" autonomy packages sync -[commands-packages] +[commands-packages] commands = {[commands-base]commands} pytest -rfE {env:SKILLS_PATHS}/decision_maker_abci/tests --cov={env:SKILLS_PATHS}/decision_maker_abci --cov-report=xml --cov-report=term --cov-report=term-missing --cov-config=.coveragerc {posargs} + pytest -rfE {env:SKILLS_PATHS}/check_stop_trading_abci/tests --cov={env:SKILLS_PATHS}/check_stop_trading_abci --cov-report=xml --cov-report=term --cov-report=term-missing --cov-config=.coveragerc {posargs} + pytest -rfE {env:SKILLS_PATHS}/market_manager_abci/tests --cov={env:SKILLS_PATHS}/market_manager_abci --cov-report=xml --cov-report=term --cov-report=term-missing --cov-config=.coveragerc {posargs} [testenv:py3.8-linux] basepython = python3.8