From a675a4f2867e5099fff3347e539332c23d6bc229 Mon Sep 17 00:00:00 2001 From: Anton Vakhrushev Date: Wed, 29 Apr 2020 20:43:56 +0300 Subject: [PATCH] Refactoring and task queue tests --- src/Action/ActionController.ts | 2 +- src/Action/BalanceHeroResourcesAction.ts | 2 +- src/Action/BuildBuildingAction.ts | 2 +- .../CheckBuildingRemainingTimeAction.ts | 2 +- src/Action/ClickButtonAction.ts | 2 +- src/Action/CompleteTaskAction.ts | 2 +- src/Action/GoToHeroVillageAction.ts | 2 +- src/Action/GoToPageAction.ts | 2 +- src/Action/SendOnAdventureAction.ts | 2 +- src/Action/SendResourcesAction.ts | 2 +- src/Action/TrainTrooperAction.ts | 2 +- .../UpdateBuildingTaskResourcesAction.ts | 2 +- src/Action/UpgradeBuildingAction.ts | 2 +- src/Action/UpgradeResourceToLevel.ts | 2 +- src/Container.ts | 3 +- src/Executor.ts | 2 +- src/Queue/Args.ts | 2 +- src/Queue/ArrayTaskProvider.ts | 17 +++++ src/Queue/DataStorageTaskProvider.ts | 36 +++++++++ src/Queue/TaskProvider.ts | 41 ++++++++++ src/Queue/TaskQueue.ts | 74 +------------------ src/Scheduler.ts | 3 +- src/Task/BalanceHeroResourcesTask.ts | 2 +- src/Task/BuildBuildingTask.ts | 2 +- src/Task/GrabVillageState.ts | 2 +- src/Task/ResourcesToLevel.ts | 2 +- src/Task/SendOnAdventureTask.ts | 2 +- src/Task/SendResourcesTask.ts | 2 +- src/Task/TaskController.ts | 2 +- src/Task/TrainTroopTask.ts | 2 +- src/Task/UpdateResourceContracts.ts | 2 +- src/Task/UpgradeBuildingTask.ts | 2 +- src/TaskQueueRenderer.ts | 2 +- tests/Queue/TaskQueueTest.js.ts | 23 ++++++ 34 files changed, 149 insertions(+), 102 deletions(-) create mode 100644 src/Queue/ArrayTaskProvider.ts create mode 100644 src/Queue/DataStorageTaskProvider.ts create mode 100644 src/Queue/TaskProvider.ts create mode 100644 tests/Queue/TaskQueueTest.js.ts diff --git a/src/Action/ActionController.ts b/src/Action/ActionController.ts index 52c8c93..a47d365 100644 --- a/src/Action/ActionController.ts +++ b/src/Action/ActionController.ts @@ -1,9 +1,9 @@ -import { Task } from '../Queue/TaskQueue'; import { Scheduler } from '../Scheduler'; import { ActionError, TryLaterError } from '../Errors'; import { grabActiveVillageId } from '../Page/VillageBlock'; import { aroundMinutes } from '../utils'; import { Args } from '../Queue/Args'; +import { Task } from '../Queue/TaskProvider'; const actionMap: { [name: string]: Function | undefined } = {}; diff --git a/src/Action/BalanceHeroResourcesAction.ts b/src/Action/BalanceHeroResourcesAction.ts index bb9b8db..23e12a5 100644 --- a/src/Action/BalanceHeroResourcesAction.ts +++ b/src/Action/BalanceHeroResourcesAction.ts @@ -1,5 +1,4 @@ import { ActionController, registerAction } from './ActionController'; -import { Task } from '../Queue/TaskQueue'; import { grabVillageResources, grabVillageResourceStorage } from '../Page/ResourcesBlock'; import { changeHeroResource, grabCurrentHeroResource } from '../Page/HeroPage'; import { grabActiveVillageId } from '../Page/VillageBlock'; @@ -7,6 +6,7 @@ import { HeroState } from '../State/HeroState'; import { calcHeroResource } from '../Core/HeroBalance'; import { HeroAllResources } from '../Core/Hero'; import { Args } from '../Queue/Args'; +import { Task } from '../Queue/TaskProvider'; @registerAction export class BalanceHeroResourcesAction extends ActionController { diff --git a/src/Action/BuildBuildingAction.ts b/src/Action/BuildBuildingAction.ts index 9492df1..23b6a1e 100644 --- a/src/Action/BuildBuildingAction.ts +++ b/src/Action/BuildBuildingAction.ts @@ -1,9 +1,9 @@ import { ActionController, registerAction } from './ActionController'; import { ActionError, GrabError, TryLaterError } from '../Errors'; -import { Task } from '../Queue/TaskQueue'; import { clickBuildButton } from '../Page/BuildingPage'; import { aroundMinutes } from '../utils'; import { Args } from '../Queue/Args'; +import { Task } from '../Queue/TaskProvider'; @registerAction export class BuildBuildingAction extends ActionController { diff --git a/src/Action/CheckBuildingRemainingTimeAction.ts b/src/Action/CheckBuildingRemainingTimeAction.ts index 5bd8f39..3319557 100644 --- a/src/Action/CheckBuildingRemainingTimeAction.ts +++ b/src/Action/CheckBuildingRemainingTimeAction.ts @@ -1,9 +1,9 @@ import { ActionController, registerAction } from './ActionController'; -import { Task } from '../Queue/TaskQueue'; import { GrabError, TryLaterError } from '../Errors'; import { grabBuildingQueueInfo } from '../Page/VillageBlock'; import { BuildingQueueInfo } from '../Game'; import { Args } from '../Queue/Args'; +import { Task } from '../Queue/TaskProvider'; @registerAction export class CheckBuildingRemainingTimeAction extends ActionController { diff --git a/src/Action/ClickButtonAction.ts b/src/Action/ClickButtonAction.ts index 35671de..102e626 100644 --- a/src/Action/ClickButtonAction.ts +++ b/src/Action/ClickButtonAction.ts @@ -1,7 +1,7 @@ import { ActionController, registerAction } from './ActionController'; -import { Task } from '../Queue/TaskQueue'; import { AbortTaskError } from '../Errors'; import { Args } from '../Queue/Args'; +import { Task } from '../Queue/TaskProvider'; @registerAction export class ClickButtonAction extends ActionController { diff --git a/src/Action/CompleteTaskAction.ts b/src/Action/CompleteTaskAction.ts index 366ef2c..44451f0 100644 --- a/src/Action/CompleteTaskAction.ts +++ b/src/Action/CompleteTaskAction.ts @@ -1,6 +1,6 @@ import { ActionController, registerAction } from './ActionController'; -import { Task } from '../Queue/TaskQueue'; import { Args } from '../Queue/Args'; +import { Task } from '../Queue/TaskProvider'; @registerAction export class CompleteTaskAction extends ActionController { diff --git a/src/Action/GoToHeroVillageAction.ts b/src/Action/GoToHeroVillageAction.ts index c8777fa..8c990e7 100644 --- a/src/Action/GoToHeroVillageAction.ts +++ b/src/Action/GoToHeroVillageAction.ts @@ -1,10 +1,10 @@ import { ActionController, registerAction } from './ActionController'; -import { Task } from '../Queue/TaskQueue'; import { grabVillageList } from '../Page/VillageBlock'; import { grabHeroVillage } from '../Page/HeroPage'; import { path } from '../utils'; import { HeroState } from '../State/HeroState'; import { Args } from '../Queue/Args'; +import { Task } from '../Queue/TaskProvider'; @registerAction export class GoToHeroVillageAction extends ActionController { diff --git a/src/Action/GoToPageAction.ts b/src/Action/GoToPageAction.ts index 9f438fa..58ca3fd 100644 --- a/src/Action/GoToPageAction.ts +++ b/src/Action/GoToPageAction.ts @@ -1,7 +1,7 @@ import { ActionController, registerAction } from './ActionController'; -import { Task } from '../Queue/TaskQueue'; import { AbortTaskError } from '../Errors'; import { Args } from '../Queue/Args'; +import { Task } from '../Queue/TaskProvider'; @registerAction export class GoToPageAction extends ActionController { diff --git a/src/Action/SendOnAdventureAction.ts b/src/Action/SendOnAdventureAction.ts index 5efb0cc..84f236d 100644 --- a/src/Action/SendOnAdventureAction.ts +++ b/src/Action/SendOnAdventureAction.ts @@ -1,8 +1,8 @@ import { ActionController, registerAction } from './ActionController'; -import { Task } from '../Queue/TaskQueue'; import { trimPrefix } from '../utils'; import { AbortTaskError } from '../Errors'; import { Args } from '../Queue/Args'; +import { Task } from '../Queue/TaskProvider'; const CONFIG = [ { level: 0, health: 60 }, diff --git a/src/Action/SendResourcesAction.ts b/src/Action/SendResourcesAction.ts index e87f65f..f414f49 100644 --- a/src/Action/SendResourcesAction.ts +++ b/src/Action/SendResourcesAction.ts @@ -1,6 +1,5 @@ import { ActionController, registerAction } from './ActionController'; import { AbortTaskError, ActionError, TryLaterError } from '../Errors'; -import { Task } from '../Queue/TaskQueue'; import { Resources } from '../Core/Resources'; import { Coordinates, Village } from '../Core/Village'; import { clickSendButton, fillSendResourcesForm, grabMerchantsInfo } from '../Page/BuildingPage'; @@ -10,6 +9,7 @@ import { SendResourcesTask } from '../Task/SendResourcesTask'; import { aroundMinutes, timestamp } from '../utils'; import { VillageState } from '../State/VillageState'; import { Args } from '../Queue/Args'; +import { Task } from '../Queue/TaskProvider'; function err(msg): never { throw new ActionError(msg); diff --git a/src/Action/TrainTrooperAction.ts b/src/Action/TrainTrooperAction.ts index 4ff9be6..06df3c4 100644 --- a/src/Action/TrainTrooperAction.ts +++ b/src/Action/TrainTrooperAction.ts @@ -1,8 +1,8 @@ import { ActionController, registerAction } from './ActionController'; import { ActionError, TryLaterError } from '../Errors'; -import { Task } from '../Queue/TaskQueue'; import { getNumber, toNumber } from '../utils'; import { Args } from '../Queue/Args'; +import { Task } from '../Queue/TaskProvider'; @registerAction export class TrainTrooperAction extends ActionController { diff --git a/src/Action/UpdateBuildingTaskResourcesAction.ts b/src/Action/UpdateBuildingTaskResourcesAction.ts index ffec8dd..1c9cb23 100644 --- a/src/Action/UpdateBuildingTaskResourcesAction.ts +++ b/src/Action/UpdateBuildingTaskResourcesAction.ts @@ -1,7 +1,7 @@ import { ActionController, registerAction } from './ActionController'; -import { Task } from '../Queue/TaskQueue'; import { grabContractResources } from '../Page/BuildingPage'; import { Args } from '../Queue/Args'; +import { Task } from '../Queue/TaskProvider'; @registerAction export class UpdateBuildingTaskResourcesAction extends ActionController { diff --git a/src/Action/UpgradeBuildingAction.ts b/src/Action/UpgradeBuildingAction.ts index 7c5b96c..24dd37b 100644 --- a/src/Action/UpgradeBuildingAction.ts +++ b/src/Action/UpgradeBuildingAction.ts @@ -1,9 +1,9 @@ import { ActionController, registerAction } from './ActionController'; import { GrabError, TryLaterError } from '../Errors'; -import { Task } from '../Queue/TaskQueue'; import { clickUpgradeButton } from '../Page/BuildingPage'; import { aroundMinutes } from '../utils'; import { Args } from '../Queue/Args'; +import { Task } from '../Queue/TaskProvider'; @registerAction export class UpgradeBuildingAction extends ActionController { diff --git a/src/Action/UpgradeResourceToLevel.ts b/src/Action/UpgradeResourceToLevel.ts index adfd445..6d25e0c 100644 --- a/src/Action/UpgradeResourceToLevel.ts +++ b/src/Action/UpgradeResourceToLevel.ts @@ -1,11 +1,11 @@ import { ActionController, registerAction } from './ActionController'; import { AbortTaskError, ActionError, TryLaterError } from '../Errors'; -import { Task } from '../Queue/TaskQueue'; import { grabResourceDeposits } from '../Page/SlotBlock'; import { UpgradeBuildingTask } from '../Task/UpgradeBuildingTask'; import { ResourceDeposit } from '../Game'; import { aroundMinutes, getNumber } from '../utils'; import { Args } from '../Queue/Args'; +import { Task } from '../Queue/TaskProvider'; @registerAction export class UpgradeResourceToLevel extends ActionController { diff --git a/src/Container.ts b/src/Container.ts index 59396c0..85b66d0 100644 --- a/src/Container.ts +++ b/src/Container.ts @@ -1,9 +1,10 @@ import { Scheduler } from './Scheduler'; -import { DataStorageTaskProvider, TaskQueue } from './Queue/TaskQueue'; +import { TaskQueue } from './Queue/TaskQueue'; import { ConsoleLogger } from './Logger'; import { ActionQueue } from './Queue/ActionQueue'; import { Executor } from './Executor'; import { ControlPanel } from './ControlPanel'; +import { DataStorageTaskProvider } from './Queue/DataStorageTaskProvider'; export class Container { private readonly version: string; diff --git a/src/Executor.ts b/src/Executor.ts index 93d927a..7831c7c 100644 --- a/src/Executor.ts +++ b/src/Executor.ts @@ -1,6 +1,5 @@ import { markPage, sleepMicro, timestamp, waitForLoad } from './utils'; import { AbortTaskError, ActionError, TryLaterError } from './Errors'; -import { Task } from './Queue/TaskQueue'; import { TaskQueueRenderer } from './TaskQueueRenderer'; import { createActionHandler } from './Action/ActionController'; import { createTaskHandler } from './Task/TaskController'; @@ -10,6 +9,7 @@ import { Scheduler } from './Scheduler'; import { Statistics } from './Statistics'; import { ExecutionState } from './State/ExecutionState'; import { Action } from './Queue/ActionQueue'; +import { Task } from './Queue/TaskProvider'; export interface ExecutionSettings { pauseTs: number; diff --git a/src/Queue/Args.ts b/src/Queue/Args.ts index 7d32950..7d922a2 100644 --- a/src/Queue/Args.ts +++ b/src/Queue/Args.ts @@ -1,6 +1,6 @@ -import { TaskId } from './TaskQueue'; import { ResourcesInterface } from '../Core/Resources'; import { CoordinatesInterface } from '../Core/Village'; +import { TaskId } from './TaskProvider'; export interface Args { taskId?: TaskId; diff --git a/src/Queue/ArrayTaskProvider.ts b/src/Queue/ArrayTaskProvider.ts new file mode 100644 index 0000000..bd36788 --- /dev/null +++ b/src/Queue/ArrayTaskProvider.ts @@ -0,0 +1,17 @@ +import { TaskList, TaskProvider } from './TaskProvider'; + +export class ArrayTaskProvider implements TaskProvider { + private tasks: TaskList; + + constructor(tasks: TaskList) { + this.tasks = tasks; + } + + getTasks(): TaskList { + return this.tasks; + } + + setTasks(tasks: TaskList): void { + this.tasks = tasks; + } +} diff --git a/src/Queue/DataStorageTaskProvider.ts b/src/Queue/DataStorageTaskProvider.ts new file mode 100644 index 0000000..36880dc --- /dev/null +++ b/src/Queue/DataStorageTaskProvider.ts @@ -0,0 +1,36 @@ +import { DataStorage } from '../DataStorage'; +import { uniqId } from '../utils'; +import { Task, TaskList, TaskProvider } from './TaskProvider'; + +const NAMESPACE = 'tasks:v1'; +const QUEUE_NAME = 'queue'; + +export class DataStorageTaskProvider implements TaskProvider { + private storage: DataStorage; + + constructor(storage: DataStorage) { + this.storage = storage; + } + + static create() { + return new DataStorageTaskProvider(new DataStorage(NAMESPACE)); + } + + getTasks(): TaskList { + const serialized = this.storage.get(QUEUE_NAME); + if (!Array.isArray(serialized)) { + return []; + } + + const storedItems = serialized as Array<{ [key: string]: any }>; + + return storedItems.map(i => { + const task = new Task(uniqId(), 0, '', {}); + return Object.assign(task, i); + }); + } + + setTasks(tasks: TaskList): void { + this.storage.set(QUEUE_NAME, tasks); + } +} diff --git a/src/Queue/TaskProvider.ts b/src/Queue/TaskProvider.ts new file mode 100644 index 0000000..a1b50bd --- /dev/null +++ b/src/Queue/TaskProvider.ts @@ -0,0 +1,41 @@ +import { Args } from './Args'; +import { uniqId } from '../utils'; + +export type TaskId = string; + +let idSequence = 1; +let lastTimestamp: number | null = null; + +export function uniqTaskId(): TaskId { + const ts = Math.floor(Date.now() / 1000); + if (ts === lastTimestamp) { + ++idSequence; + } else { + idSequence = 1; + } + lastTimestamp = ts; + return 'tid.' + ts + '.' + String(idSequence).padStart(4, '0') + '.' + uniqId(''); +} + +export class Task { + readonly id: TaskId; + readonly ts: number; + readonly name: string; + readonly args: Args; + + constructor(id: TaskId, ts: number, name: string, args: Args) { + this.id = id; + this.ts = ts; + this.name = name; + this.args = args; + } +} + +export type TaskList = Array; +export type ImmutableTaskList = ReadonlyArray; + +export interface TaskProvider { + getTasks(): TaskList; + + setTasks(tasks: TaskList): void; +} diff --git a/src/Queue/TaskQueue.ts b/src/Queue/TaskQueue.ts index b50b30d..48eaac0 100644 --- a/src/Queue/TaskQueue.ts +++ b/src/Queue/TaskQueue.ts @@ -1,78 +1,6 @@ -import { uniqId } from '../utils'; import { Logger } from '../Logger'; -import { DataStorage } from '../DataStorage'; import { Args } from './Args'; - -const NAMESPACE = 'tasks:v1'; -const QUEUE_NAME = 'queue'; - -export type TaskId = string; - -let idSequence = 1; -let lastTimestamp: number | null = null; - -function uniqTaskId(): TaskId { - const ts = Math.floor(Date.now() / 1000); - if (ts === lastTimestamp) { - ++idSequence; - } else { - idSequence = 1; - } - lastTimestamp = ts; - return 'tid.' + ts + '.' + String(idSequence).padStart(4, '0') + '.' + uniqId(''); -} - -export class Task { - readonly id: TaskId; - readonly ts: number; - readonly name: string; - readonly args: Args; - constructor(id: TaskId, ts: number, name: string, args: Args) { - this.id = id; - this.ts = ts; - this.name = name; - this.args = args; - } -} - -type TaskList = Array; - -export type ImmutableTaskList = ReadonlyArray; - -export interface TaskProvider { - getTasks(): TaskList; - setTasks(tasks: TaskList): void; -} - -export class DataStorageTaskProvider implements TaskProvider { - private storage: DataStorage; - - constructor(storage: DataStorage) { - this.storage = storage; - } - - static create() { - return new DataStorageTaskProvider(new DataStorage(NAMESPACE)); - } - - getTasks(): TaskList { - const serialized = this.storage.get(QUEUE_NAME); - if (!Array.isArray(serialized)) { - return []; - } - - const storedItems = serialized as Array<{ [key: string]: any }>; - - return storedItems.map(i => { - const task = new Task(uniqId(), 0, '', {}); - return Object.assign(task, i); - }); - } - - setTasks(tasks: TaskList): void { - this.storage.set(QUEUE_NAME, tasks); - } -} +import { ImmutableTaskList, Task, TaskId, TaskList, TaskProvider, uniqTaskId } from './TaskProvider'; export class TaskQueue { private provider: TaskProvider; diff --git a/src/Scheduler.ts b/src/Scheduler.ts index 86d229b..94551ce 100644 --- a/src/Scheduler.ts +++ b/src/Scheduler.ts @@ -1,6 +1,6 @@ import { timestamp } from './utils'; import { UpgradeBuildingTask } from './Task/UpgradeBuildingTask'; -import { ImmutableTaskList, Task, TaskId, TaskQueue } from './Queue/TaskQueue'; +import { TaskQueue } from './Queue/TaskQueue'; import { SendOnAdventureTask } from './Task/SendOnAdventureTask'; import { BalanceHeroResourcesTask } from './Task/BalanceHeroResourcesTask'; import { Logger } from './Logger'; @@ -12,6 +12,7 @@ import { TrainTroopTask } from './Task/TrainTroopTask'; import { Resources, ResourcesInterface } from './Core/Resources'; import { SendResourcesTask } from './Task/SendResourcesTask'; import { Args } from './Queue/Args'; +import { ImmutableTaskList, Task, TaskId } from './Queue/TaskProvider'; export class Scheduler { private taskQueue: TaskQueue; diff --git a/src/Task/BalanceHeroResourcesTask.ts b/src/Task/BalanceHeroResourcesTask.ts index c02f1a2..a66da5c 100644 --- a/src/Task/BalanceHeroResourcesTask.ts +++ b/src/Task/BalanceHeroResourcesTask.ts @@ -1,4 +1,3 @@ -import { Task } from '../Queue/TaskQueue'; import { TaskController, registerTask } from './TaskController'; import { GoToPageAction } from '../Action/GoToPageAction'; import { CompleteTaskAction } from '../Action/CompleteTaskAction'; @@ -7,6 +6,7 @@ import { path } from '../utils'; import { GoToHeroVillageAction } from '../Action/GoToHeroVillageAction'; import { Action } from '../Queue/ActionQueue'; import { Args } from '../Queue/Args'; +import { Task } from '../Queue/TaskProvider'; @registerTask export class BalanceHeroResourcesTask extends TaskController { diff --git a/src/Task/BuildBuildingTask.ts b/src/Task/BuildBuildingTask.ts index dabfd20..c6ccdc3 100644 --- a/src/Task/BuildBuildingTask.ts +++ b/src/Task/BuildBuildingTask.ts @@ -3,10 +3,10 @@ import { CheckBuildingRemainingTimeAction } from '../Action/CheckBuildingRemaini import { CompleteTaskAction } from '../Action/CompleteTaskAction'; import { GoToPageAction } from '../Action/GoToPageAction'; import { path } from '../utils'; -import { Task } from '../Queue/TaskQueue'; import { TaskController, registerTask } from './TaskController'; import { Action } from '../Queue/ActionQueue'; import { Args } from '../Queue/Args'; +import { Task } from '../Queue/TaskProvider'; @registerTask export class BuildBuildingTask extends TaskController { diff --git a/src/Task/GrabVillageState.ts b/src/Task/GrabVillageState.ts index 192976d..cf100a2 100644 --- a/src/Task/GrabVillageState.ts +++ b/src/Task/GrabVillageState.ts @@ -1,6 +1,6 @@ import { TaskController, registerTask, ActionDefinition } from './TaskController'; import { scanAllVillagesBundle } from './ActionBundles'; -import { Task } from '../Queue/TaskQueue'; +import { Task } from '../Queue/TaskProvider'; @registerTask export class GrabVillageState extends TaskController { diff --git a/src/Task/ResourcesToLevel.ts b/src/Task/ResourcesToLevel.ts index 2d53571..d5c5cf0 100644 --- a/src/Task/ResourcesToLevel.ts +++ b/src/Task/ResourcesToLevel.ts @@ -1,4 +1,3 @@ -import { Task } from '../Queue/TaskQueue'; import { TaskController, registerTask, ActionDefinition } from './TaskController'; import { GoToPageAction } from '../Action/GoToPageAction'; import { CompleteTaskAction } from '../Action/CompleteTaskAction'; @@ -6,6 +5,7 @@ import { path } from '../utils'; import { UpgradeResourceToLevel } from '../Action/UpgradeResourceToLevel'; import { Action } from '../Queue/ActionQueue'; import { Args } from '../Queue/Args'; +import { Task } from '../Queue/TaskProvider'; @registerTask export class ResourcesToLevel extends TaskController { diff --git a/src/Task/SendOnAdventureTask.ts b/src/Task/SendOnAdventureTask.ts index 3baf49e..8020b10 100644 --- a/src/Task/SendOnAdventureTask.ts +++ b/src/Task/SendOnAdventureTask.ts @@ -1,4 +1,3 @@ -import { Task } from '../Queue/TaskQueue'; import { TaskController, registerTask } from './TaskController'; import { GoToPageAction } from '../Action/GoToPageAction'; import { CompleteTaskAction } from '../Action/CompleteTaskAction'; @@ -7,6 +6,7 @@ import { ClickButtonAction } from '../Action/ClickButtonAction'; import { path } from '../utils'; import { Action } from '../Queue/ActionQueue'; import { Args } from '../Queue/Args'; +import { Task } from '../Queue/TaskProvider'; @registerTask export class SendOnAdventureTask extends TaskController { diff --git a/src/Task/SendResourcesTask.ts b/src/Task/SendResourcesTask.ts index 8e0feb0..c9dd41d 100644 --- a/src/Task/SendResourcesTask.ts +++ b/src/Task/SendResourcesTask.ts @@ -1,4 +1,3 @@ -import { Task } from '../Queue/TaskQueue'; import { TaskController, registerTask, ActionDefinition } from './TaskController'; import { GoToPageAction } from '../Action/GoToPageAction'; import { CompleteTaskAction } from '../Action/CompleteTaskAction'; @@ -7,6 +6,7 @@ import { SendResourcesAction } from '../Action/SendResourcesAction'; import { ClickButtonAction } from '../Action/ClickButtonAction'; import { scanAllVillagesBundle } from './ActionBundles'; import { Args } from '../Queue/Args'; +import { Task } from '../Queue/TaskProvider'; @registerTask export class SendResourcesTask extends TaskController { diff --git a/src/Task/TaskController.ts b/src/Task/TaskController.ts index 98f0eb2..735bece 100644 --- a/src/Task/TaskController.ts +++ b/src/Task/TaskController.ts @@ -1,8 +1,8 @@ -import { Task } from '../Queue/TaskQueue'; import { Scheduler } from '../Scheduler'; import { CompleteTaskAction } from '../Action/CompleteTaskAction'; import { Action } from '../Queue/ActionQueue'; import { Args } from '../Queue/Args'; +import { Task } from '../Queue/TaskProvider'; const taskMap: { [name: string]: Function | undefined } = {}; diff --git a/src/Task/TrainTroopTask.ts b/src/Task/TrainTroopTask.ts index 1aa4975..cefc16f 100644 --- a/src/Task/TrainTroopTask.ts +++ b/src/Task/TrainTroopTask.ts @@ -1,4 +1,3 @@ -import { Task } from '../Queue/TaskQueue'; import { TaskController, registerTask } from './TaskController'; import { GoToPageAction } from '../Action/GoToPageAction'; import { CompleteTaskAction } from '../Action/CompleteTaskAction'; @@ -6,6 +5,7 @@ import { TrainTrooperAction } from '../Action/TrainTrooperAction'; import { path } from '../utils'; import { Action } from '../Queue/ActionQueue'; import { Args } from '../Queue/Args'; +import { Task } from '../Queue/TaskProvider'; @registerTask export class TrainTroopTask extends TaskController { diff --git a/src/Task/UpdateResourceContracts.ts b/src/Task/UpdateResourceContracts.ts index 39fb395..f684c23 100644 --- a/src/Task/UpdateResourceContracts.ts +++ b/src/Task/UpdateResourceContracts.ts @@ -1,4 +1,3 @@ -import { Task } from '../Queue/TaskQueue'; import { TaskController, registerTask } from './TaskController'; import { GoToPageAction } from '../Action/GoToPageAction'; import { path } from '../utils'; @@ -7,6 +6,7 @@ import { UpdateBuildingTaskResourcesAction } from '../Action/UpdateBuildingTaskR import { CompleteTaskAction } from '../Action/CompleteTaskAction'; import { Action } from '../Queue/ActionQueue'; import { Args } from '../Queue/Args'; +import { Task } from '../Queue/TaskProvider'; @registerTask export class UpdateResourceContracts extends TaskController { diff --git a/src/Task/UpgradeBuildingTask.ts b/src/Task/UpgradeBuildingTask.ts index 5ee04bc..e335bd0 100644 --- a/src/Task/UpgradeBuildingTask.ts +++ b/src/Task/UpgradeBuildingTask.ts @@ -1,5 +1,4 @@ import { UpgradeBuildingAction } from '../Action/UpgradeBuildingAction'; -import { Task } from '../Queue/TaskQueue'; import { TaskController, registerTask } from './TaskController'; import { GoToPageAction } from '../Action/GoToPageAction'; import { CheckBuildingRemainingTimeAction } from '../Action/CheckBuildingRemainingTimeAction'; @@ -7,6 +6,7 @@ import { CompleteTaskAction } from '../Action/CompleteTaskAction'; import { path } from '../utils'; import { Action } from '../Queue/ActionQueue'; import { Args } from '../Queue/Args'; +import { Task } from '../Queue/TaskProvider'; @registerTask export class UpgradeBuildingTask extends TaskController { diff --git a/src/TaskQueueRenderer.ts b/src/TaskQueueRenderer.ts index 5b19723..6e268e0 100644 --- a/src/TaskQueueRenderer.ts +++ b/src/TaskQueueRenderer.ts @@ -1,6 +1,6 @@ -import { ImmutableTaskList } from './Queue/TaskQueue'; import { uniqId } from './utils'; import * as dateFormat from 'dateformat'; +import { ImmutableTaskList } from './Queue/TaskProvider'; const ID = uniqId(); diff --git a/tests/Queue/TaskQueueTest.js.ts b/tests/Queue/TaskQueueTest.js.ts new file mode 100644 index 0000000..5e4b626 --- /dev/null +++ b/tests/Queue/TaskQueueTest.js.ts @@ -0,0 +1,23 @@ +import { it, describe } from 'mocha'; +import { expect } from 'chai'; + +import { Task } from '../../src/Queue/TaskProvider'; +import { TaskQueue } from '../../src/Queue/TaskQueue'; +import { NullLogger } from '../../src/Logger'; +import { ArrayTaskProvider } from '../../src/Queue/ArrayTaskProvider'; + +describe('Task Queue', function() { + it('Can get task from queue', function() { + const provider = new ArrayTaskProvider([new Task('1', 0, 'task', {})]); + const queue = new TaskQueue(provider, new NullLogger()); + const task = queue.get(1); + expect(task).instanceOf(Task); + }); + + it("Don't get unready task from queue", function() { + const provider = new ArrayTaskProvider([new Task('1', 5, 'task', {})]); + const queue = new TaskQueue(provider, new NullLogger()); + const task = queue.get(1); + expect(task).is.equals(undefined); + }); +});