���������TestCase subclass: #TowergameServerTests instanceVariableNames: 'randomPort towergame server' classVariableNames: '' poolDictionaries: '' category: 'Towergame-Tests'! !TowergameServerTests methodsFor: 'running' stamp: 'HerbertVoj������������������������k 8/14/2017 18:09:53'! uidy: aString ^ UUID fromString36: aString ! ! !TowergameServerTests methodsFor: 'running' stamp: 'HerbertVoj������������������������k 8/14/2017 18:09:53'! setUp randomPort := 1700 + 32 atRandom. towergame := Mock new. server := Towergame serverFor: towergame on: randomPort. server start. self assert: server isRunning & server isListening description: ('Failed to start server on port {1}. Is there one already?' format: { server port }) ! ! !TowergameServerTests methodsFor: 'running' stamp: 'HerbertVoj������������������������k 8/14/2017 18:09:53'! tearDown server stop! ! !TowergameServerTests methodsFor: 'tests' stamp: 'HerbertVoj������������������������k 8/14/2017 18:09:53'! testEmptySyncRequest | znClient response | (towergame stub clientSync: Arg payload) willReturn: nil. znClient := self znClientForSync: 'null'. response := znClient timeout: 1; post; response. response should satisfy: #isSuccess. response contentType should equal: ZnMimeType applicationJson. (STON fromString: response entity contents) should equal: nil. Arg payload should equal: nil! ! !TowergameServerTests methodsFor: 'tests' stamp: 'HerbertVoj������������������������k 8/14/2017 18:09:53'! testRejectEmptyGetSyncRequest | znClient response | (towergame stub clientSync: Arg payload) willReturn: nil. znClient := self znClientForSync: 'null'. response := znClient timeout: 1; get; response. response code should equal: ZnStatusLine methodNotAllowed code. towergame should not receive clientSync: Any! ! !TowergameServerTests methodsFor: 'tests' stamp: 'HerbertVoj������������������������k 8/14/2017 18:09:53'! testNonEmptySyncRequest | znClient response | (towergame stub clientSync: Arg payload) willReturn: { #agentId -> (self uidy: '007') } asDictionary. znClient := self znClientForSync: ('\{"deviceId":"{1}","agentAnsweredQuestions":\{"good":1,"bad":2\}\}' format: { self uidy: 'Q' }). response := znClient timeout: 1; post; response. response should satisfy: #isSuccess. response contentType should equal: ZnMimeType applicationJson. (STON fromString: response entity contents) should equal: { 'agentId' -> (self uidy: '007') asString } asDictionary. Arg payload in: [ :arg | arg deviceId should equal: (self uidy: 'Q'). arg agentAnsweredQuestions should satisfy: #notNil. arg agentAnsweredQuestions good should equal: 1. arg agentAnsweredQuestions bad should equal: 2 ] ! ! !TowergameServerTests methodsFor: 'private' stamp: 'HerbertVoj������������������������k 8/14/2017 18:09:53'! znClientForSync: jsonString ^ ZnClient new url: server localUrl; path: '/api/v1/sync'; entity: (ZnEntity with: jsonString type: ZnMimeType applicationJson) ! ! TestCase subclass: #TowergameSyncTests instanceVariableNames: 'towergame session dao' classVariableNames: '' poolDictionaries: '' category: 'Towergame-Tests'! !TowergameSyncTests methodsFor: 'tests' stamp: 'HerbertVoj������������������������k 8/14/2017 18:09:53'! testPlayerChecksStateVersionAndIsBehind | result payload | session createTables. session inUnitOfWorkDo: [ | agent state | agent := TgAgent id: (self uidy: '007'). state := (TgState agent: agent version: (self uidy: '18-eff')) packs: #('foopack' 'barpack') asSet; valuables: (TgValuables coins: 20 gems: 3); score: (TgFloors total: 4 reinforced: 1); bestScore: (TgFloors total: 18); answers: (TgAnswers good: 2 bad: 3); yourself. session registerAll: {state. TgAct agent: agent tool: (TgTool id: (self uidy: 'Q7') ) } ]. towergame := Towergame dao: dao. payload := NeoJSONObject new agentId: (self uidy: '007'); stateVersion: (self uidy: '23-fefe'); deviceId: (self uidy: 'Q7'). result := towergame clientSync: payload. result where agentId should equal: (self uidy: '007'). result where stateVersion should equal: (self uidy: '18-eff'). result where purchasedPacks should satisfy: [ :x | x asSet should equal: #('foopack' 'barpack') asSet ]. result where valuables coins should equal: 20. result where valuables gems should equal: 3. result where floorsNumber current should equal: 4. result where floorsNumber best should equal: 18. result where floorsNumber reinforced should equal: 1. result where agentAnsweredQuestions good should equal: 2. result where agentAnsweredQuestions bad should equal: 3. result where totalAnsweredQuestions good should equal: 2. result where totalAnsweredQuestions bad should equal: 3! ! !TowergameSyncTests methodsFor: 'tests' stamp: 'HerbyVojcik 8/14/2017 18:18'! testPlayerChecksStateVersion | result payload | session createTables. session inUnitOfWorkDo: [ | agent state | agent := TgAgent id: (self uidy: '007'). state := TgState agent: agent version: (self uidy: '23-fefe'). session registerAll: {state. TgAct agent: agent tool: (TgTool id: (self uidy: 'Q7') ) } ]. towergame := Towergame dao: dao. payload := NeoJSONObject new agentId: (self uidy: '007'); stateVersion: (self uidy: '23-fefe'); deviceId: (self uidy: 'Q7'). result := towergame clientSync: payload. result where agentId should equal: (self uidy: '007'). result where stateVersion should equal: (self uidy: '23-fefe'). result where totalAnsweredQuestions good should equal: 0. result where totalAnsweredQuestions bad should equal: 0! ! !TowergameSyncTests methodsFor: 'running' stamp: 'HerbertVoj������������������������k 8/14/2017 18:09:53'! uidy: aString ^ UUID fromString36: aString ! ! !TowergameSyncTests methodsFor: 'running' stamp: 'HerbertVoj������������������������k 8/14/2017 18:09:53'! setUp dao := Towergame daoForLogin: self loginToTemporaryDatabase. session := dao glorpSession. ! ! !TowergameSyncTests methodsFor: 'running' stamp: 'HerbertVoj������������������������k 8/14/2017 18:09:53'! tearDown session logout! ! !TowergameSyncTests methodsFor: 'running' stamp: 'HerbyVojcik 8/14/2017 18:16'! loginToTemporaryDatabase ^ Login new database: UDBCSQLite3Platform new; host: ''; port: ''; username: ''; password: ''; databaseName: ''; yourself! !