def test_multi_create_pickup_data_for_other(pickup_for_create_pickup_data):
    # Setup
    creator = patcher_file.PickupCreatorMulti(
        MagicMock(), patcher_file._SimplifiedMemo(),
        PlayersConfiguration(0, {
            0: "You",
            1: "Someone"
        }))

    # Run
    data = creator.create_pickup_data(
        PickupIndex(10), PickupTarget(pickup_for_create_pickup_data,
                                      1), pickup_for_create_pickup_data,
        PickupModelStyle.ALL_VISIBLE, "Scan Text")

    # Assert
    assert data == {
        'conditional_resources': [],
        'convert': [],
        'hud_text': ['Sent Cake to Someone!'],
        'resources': [
            {
                'amount': 11,
                'index': 74
            },
        ],
        'scan': "Someone's Scan Text",
    }
def test_solo_create_pickup_data(pickup_for_create_pickup_data):
    # Setup
    creator = patcher_file.PickupCreatorSolo(MagicMock(),
                                             patcher_file._SimplifiedMemo())

    # Run
    data = creator.create_pickup_data(
        PickupIndex(10), PickupTarget(pickup_for_create_pickup_data,
                                      0), pickup_for_create_pickup_data,
        PickupModelStyle.ALL_VISIBLE, "Scan Text")

    # Assert
    assert data == {
        'conditional_resources': [{
            'item': 1,
            'resources': [{
                'amount': 1,
                'index': 2
            }]
        }],
        'convert': [],
        'hud_text': ['Sugar acquired!', 'Salt acquired!'],
        'resources': [{
            'amount': 1,
            'index': 1
        }],
        'scan':
        'Scan Text',
    }
def test_create_pickup_all_from_pool(echoes_resource_database,
                                     default_layout_configuration,
                                     disable_hud_popup: bool):
    item_pool = pool_creator.calculate_pool_results(
        default_layout_configuration, echoes_resource_database)
    index = PickupIndex(0)
    if disable_hud_popup:
        memo_data = patcher_file._SimplifiedMemo()
    else:
        memo_data = default_prime2_memo_data()
    creator = patcher_file.PickupCreatorSolo(MagicMock(), memo_data)

    for item in item_pool.pickups:
        creator.create_pickup(index, PickupTarget(item, 0), item,
                              PickupModelStyle.ALL_VISIBLE)
def test_multi_create_pickup_data_for_self(pickup_for_create_pickup_data):
    # Setup
    creator = patcher_file.PickupCreatorMulti(
        MagicMock(), patcher_file._SimplifiedMemo(),
        PlayersConfiguration(0, {
            0: "You",
            1: "Someone"
        }))

    # Run
    data = creator.create_pickup_data(
        PickupIndex(10), PickupTarget(pickup_for_create_pickup_data,
                                      0), pickup_for_create_pickup_data,
        PickupModelStyle.ALL_VISIBLE, "Scan Text")

    # Assert
    assert data == {
        'conditional_resources': [{
            'item':
            1,
            'resources': [
                {
                    'amount': 1,
                    'index': 2
                },
                {
                    'amount': 11,
                    'index': 74
                },
            ]
        }],
        'convert': [],
        'hud_text': ['Sugar acquired!', 'Salt acquired!'],
        'resources': [
            {
                'amount': 1,
                'index': 1
            },
            {
                'amount': 11,
                'index': 74
            },
        ],
        'scan':
        'Your Scan Text',
    }
def test_run_validated_hud_text():
    # Setup
    rng = MagicMock()
    rng.randint.return_value = 0
    creator = patcher_file.PickupCreatorSolo(rng, patcher_file._SimplifiedMemo())
    resource_a = SimpleResourceInfo(1, "A", "A", ResourceType.ITEM)
    pickup = PickupEntry("Energy Transfer Module", 1, ItemCategory.TEMPLE_KEY, ItemCategory.KEY,
                         (
                             ConditionalResources("Energy Transfer Module", None, ((resource_a, 1),)),
                         ))

    # Run
    data = creator.create_pickup_data(PickupIndex(0), PickupTarget(pickup, 0), pickup, PickupModelStyle.ALL_VISIBLE,
                                      "Scan Text")

    # Assert
    assert data['hud_text'] == ['Run validated!']
def test_create_pickup_list(model_style: PickupModelStyle, empty_patches):
    # Setup
    has_scan_text = model_style in {
        PickupModelStyle.ALL_VISIBLE, PickupModelStyle.HIDE_MODEL
    }
    rng = Random(5000)

    useless_resource = ItemResourceInfo(0, "Useless", "Useless", 10, None)
    resource_a = ItemResourceInfo(1, "A", "A", 10, None)
    resource_b = ItemResourceInfo(2, "B", "B", 10, None)
    pickup_a = PickupEntry("A", 1, ItemCategory.TEMPLE_KEY, ItemCategory.KEY,
                           (ConditionalResources(None, None,
                                                 ((resource_a, 1), )), ))
    pickup_b = PickupEntry("B", 2, ItemCategory.SUIT,
                           ItemCategory.LIFE_SUPPORT,
                           (ConditionalResources(None, None,
                                                 ((resource_b, 1),
                                                  (resource_a, 1))),
                            ConditionalResources(None, resource_b,
                                                 ((resource_a, 5), ))))
    pickup_c = PickupEntry(
        "C",
        2,
        ItemCategory.EXPANSION,
        ItemCategory.MISSILE_RELATED,
        resources=(ConditionalResources(None, None,
                                        ((resource_b, 2), (resource_a, 1))), ),
        convert_resources=(ResourceConversion(useless_resource, resource_a), ))

    useless_pickup = PickupEntry(
        "Useless", 0, ItemCategory.ETM, ItemCategory.ETM,
        (ConditionalResources(None, None, ((useless_resource, 1), )), ))
    patches = empty_patches.assign_pickup_assignment({
        PickupIndex(0):
        PickupTarget(pickup_a, 0),
        PickupIndex(2):
        PickupTarget(pickup_b, 0),
        PickupIndex(3):
        PickupTarget(pickup_a, 0),
        PickupIndex(4):
        PickupTarget(pickup_c, 0),
    })
    creator = patcher_file.PickupCreatorSolo(MagicMock(),
                                             patcher_file._SimplifiedMemo())

    # Run
    result = patcher_file._create_pickup_list(
        patches,
        PickupTarget(useless_pickup, 0),
        5,
        rng,
        model_style,
        PickupModelDataSource.ETM,
        creator,
    )

    # Assert
    assert len(result) == 5
    assert result[0] == {
        "pickup_index":
        0,
        "model_index":
        1 if model_style == PickupModelStyle.ALL_VISIBLE else 30,
        "scan":
        "A" if has_scan_text else "Unknown item",
        "hud_text": ["A acquired!"] if model_style != PickupModelStyle.HIDE_ALL
        else ['Unknown item acquired!'],
        "sound_index":
        1 if model_style == PickupModelStyle.ALL_VISIBLE else 0,
        "jingle_index":
        2 if model_style == PickupModelStyle.ALL_VISIBLE else 0,
        "resources": [{
            "index": 1,
            "amount": 1
        }],
        "conditional_resources": [],
        "convert": [],
    }
    assert result[1] == {
        "pickup_index":
        1,
        "scan":
        "Useless" if has_scan_text else "Unknown item",
        "model_index":
        0 if model_style == PickupModelStyle.ALL_VISIBLE else 30,
        "hud_text":
        ["Useless acquired!"] if model_style != PickupModelStyle.HIDE_ALL else
        ['Unknown item acquired!'],
        "sound_index":
        0,
        "jingle_index":
        0,
        "resources": [{
            "index": 0,
            "amount": 1
        }],
        "conditional_resources": [],
        "convert": [],
    }
    assert result[2] == {
        "pickup_index":
        2,
        "scan":
        "B" if has_scan_text else "Unknown item",
        "model_index":
        2 if model_style == PickupModelStyle.ALL_VISIBLE else 30,
        "hud_text": ["B acquired!", "B acquired!"]
        if model_style != PickupModelStyle.HIDE_ALL else
        ['Unknown item acquired!', 'Unknown item acquired!'],
        "sound_index":
        0,
        "jingle_index":
        1 if model_style == PickupModelStyle.ALL_VISIBLE else 0,
        "resources": [{
            "index": 2,
            "amount": 1
        }, {
            "index": 1,
            "amount": 1
        }],
        "conditional_resources": [{
            "item": 2,
            "resources": [{
                "index": 1,
                "amount": 5
            }]
        }],
        "convert": [],
    }
    assert result[3] == {
        "pickup_index":
        3,
        "scan":
        "A" if has_scan_text else "Unknown item",
        "model_index":
        1 if model_style == PickupModelStyle.ALL_VISIBLE else 30,
        "hud_text": ["A acquired!"] if model_style != PickupModelStyle.HIDE_ALL
        else ['Unknown item acquired!'],
        "sound_index":
        1 if model_style == PickupModelStyle.ALL_VISIBLE else 0,
        "jingle_index":
        2 if model_style == PickupModelStyle.ALL_VISIBLE else 0,
        "resources": [{
            "index": 1,
            "amount": 1
        }],
        "conditional_resources": [],
        "convert": [],
    }
    assert result[4] == {
        "pickup_index":
        4,
        "scan":
        "C that provides 2 B and 1 A" if has_scan_text else "Unknown item",
        "model_index":
        2 if model_style == PickupModelStyle.ALL_VISIBLE else 30,
        "hud_text": ["C acquired!"] if model_style != PickupModelStyle.HIDE_ALL
        else ['Unknown item acquired!'],
        "sound_index":
        0,
        "jingle_index":
        0,
        "resources": [{
            "index": 2,
            "amount": 2
        }, {
            "index": 1,
            "amount": 1
        }],
        "conditional_resources": [],
        "convert": [{
            "from_item": 0,
            "to_item": 1,
            "clear_source": True,
            "overwrite_target": False,
        }],
    }