Files

71 lines
2.4 KiB
Python

import copy
import unittest
from pathlib import Path
from PIL import Image
from automation.engine import Matcher, Region, WorkflowError, load_flow
from automation.sweep import SweepRunner
ROOT = Path(__file__).resolve().parent.parent
class SweepDesktop:
def __init__(self, images):
self.images = images
self.index = 0
self.clicks = []
def screenshot(self):
return self.images[min(self.index, len(self.images) - 1)]
def click(self, point, region, size, hold=0.2):
self.clicks.append((point, hold))
self.index += 1
class SweepTests(unittest.TestCase):
def setUp(self):
self.flow = load_flow(ROOT / 'workflows/sweep_claim.json')
self.flow['interval_seconds'] = 0
self.matcher = Matcher(ROOT / 'assets')
self.region = Region(0, 0, 562, 1002)
def image(self, state):
image = Image.new('RGB', (562, 1002), (42, 58, 73))
for spec in self.flow['states'][state]:
template = Image.open(ROOT / 'assets' / spec['template']).convert('RGB')
x, y, _, _ = spec['search']
image.paste(template, (x + 5, y + 5))
return image
def runner(self, states):
desktop = SweepDesktop([self.image(state) for state in states])
flow = copy.deepcopy(self.flow)
return desktop, SweepRunner(desktop, self.matcher, flow,
lambda _: self.region, log=lambda _: None, timeout=0.8)
def test_five_sweeps_dismisses_each_result_and_returns_home(self):
states = ['home', 'sweep_available']
for _ in range(5):
states.extend(('reward', 'sweep_available'))
states.append('home')
desktop, runner = self.runner(states)
self.assertEqual(runner.run(5), 'completed')
expected = [(self.flow['clicks']['open_pig'], 0.2)]
for _ in range(5):
expected.extend(((self.flow['clicks']['sweep'], 0.8),
(self.flow['clicks']['dismiss_reward'], 0.2)))
expected.append((self.flow['clicks']['close'], 0.2))
self.assertEqual(desktop.clicks, expected)
def test_invalid_count_stops_before_clicking(self):
desktop, runner = self.runner(['home'])
with self.assertRaises(WorkflowError):
runner.run(0)
self.assertEqual(desktop.clicks, [])
if __name__ == '__main__':
unittest.main()