Files
Archipelago/worlds/stardew_valley/test/rules/TestMuseum.py
agilbert1412 36bab6f52a Stardew Valley: 0.6.7 Day 1 fixes (#6098)
- The Shane and Sebastian Portrait filler items werent tagged properly.
- The Beach Farm adds one secretsanity check, so it needs to be in the allsanity preset
- The Allsanity preset is renamed to "Maxsanity" to encourage better defined terminology and Allsanity means something else
- The "All Random" preset has been removed entirely. It has been the cause of too many beginner footguns over the years. People can still achieve the effect manually, but at least they'll have to try a little bit to ruin their own experience.
2026-04-07 21:38:04 +02:00

72 lines
2.9 KiB
Python

from collections import Counter
from random import Random
from unittest.mock import patch
from ..bases import SVTestBase
from ..options import presets
from ... import options, StardewLogic, StardewRule
from ...logic.museum_logic import MuseumLogic
from ...stardew_rule import true_, LiteralStardewRule
class TestMuseumMilestones(SVTestBase):
options = {
options.Museumsanity: options.Museumsanity.option_milestones
}
def test_50_milestone(self):
self.multiworld.state.prog_items = {1: Counter()}
milestone_rule = self.world.logic.museum.can_find_museum_items(50)
self.assert_rule_false(milestone_rule, self.multiworld.state)
class DisabledMuseumRule(LiteralStardewRule):
value = False
def __or__(self, other) -> StardewRule:
return other
def __and__(self, other) -> StardewRule:
return self
def __repr__(self):
return "Disabled Museum Rule"
class TestMuseumsanityDisabledExcludesMuseumDonationsFromOtherLocations(SVTestBase):
options = {
**presets.maxsanity_mods_7_x_x(),
options.Museumsanity.internal_name: options.Museumsanity.option_none
}
def test_museum_donations_are_never_required_in_any_locations(self):
with patch("worlds.stardew_valley.logic.museum_logic.MuseumLogic") as MockMuseumLogic:
museum_logic: MuseumLogic = MockMuseumLogic.return_value
museum_logic.can_donate_museum_items.return_value = DisabledMuseumRule()
museum_logic.can_donate_museum_artifacts.return_value = DisabledMuseumRule()
museum_logic.can_find_museum_artifacts.return_value = DisabledMuseumRule()
museum_logic.can_find_museum_minerals.return_value = DisabledMuseumRule()
museum_logic.can_find_museum_items.return_value = DisabledMuseumRule()
museum_logic.can_complete_museum.return_value = DisabledMuseumRule()
museum_logic.can_donate.return_value = DisabledMuseumRule()
# Allowing calls to museum rules since a lot of other logic depends on it, for minerals for instance.
museum_logic.can_find_museum_item.return_value = true_
museum_logic.has_any_gem.return_value = true_
museum_logic.has_all_gems.return_value = true_
regions = {region.name for region in self.multiworld.regions}
self.world.logic = StardewLogic(self.player, self.world.options, self.world.content, regions)
self.world.set_rules()
self.collect_everything()
# Fixed seed for consistency
seed = 2184959
random = Random(seed)
all_locations = self.get_real_locations()
# We test 1% of all locations, to be fast
locations_to_test = random.sample(all_locations, k=len(all_locations)//100)
for location in locations_to_test:
with self.subTest(location.name):
self.assert_can_reach_location(location)