• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

DaniSomoza / galactic-commander / 12422152220

19 Dec 2024 10:57PM UTC coverage: 52.396% (-13.2%) from 65.587%
12422152220

Pull #11

github

web-flow
Merge e0cd6a508 into 4f9f087f0
Pull Request #11: Build units

204 of 768 branches covered (26.56%)

Branch coverage included in aggregate %.

363 of 886 new or added lines in 84 files covered. (40.97%)

10 existing lines in 7 files now uncovered.

1414 of 2320 relevant lines covered (60.95%)

3.83 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

63.83
/packages/frontend/src/store/PlayerContext.tsx
1
import { createContext, useCallback, useContext, useEffect, useState } from 'react'
2

3
import { PlayerType } from 'game-api-microservice/src/types/Player'
4
import { PlanetType } from 'game-api-microservice/src/types/Planet'
5
import { UnitType } from 'game-api-microservice/src/types/Unit'
6

7
import { useAuthorization } from './AuthorizationContext'
8
import { createPlayer, getPlayer } from '../endpoints/game/playerEndpoints'
9
import { useGameInfo } from './GameInfoContext'
10

11
const initialContext = {
1✔
12
  player: undefined,
13
  selectedPlanet: undefined,
UNCOV
14
  loadPlayer: () => Promise.resolve({ player: {} as PlayerType }),
×
15
  createNewPlayer: () => {},
16
  isPlayerLoading: true,
17
  createPlayerTaskId: '',
18
  units: [],
19
  raceUnits: [],
20
  planetUnits: []
21
}
22

23
type playerContextValue = {
24
  player?: PlayerType
25
  selectedPlanet?: PlanetType
26
  loadPlayer: () => Promise<{ player: PlayerType } | undefined>
27
  createNewPlayer: (universeName: string, raceName: string) => void
28
  isPlayerLoading: boolean
29
  createPlayerTaskId?: string
30
  units: UnitType[]
31
  raceUnits: UnitType[]
32
  planetUnits: UnitType[]
33
}
34

35
const playerContext = createContext<playerContextValue>(initialContext)
1✔
36

37
function usePlayer() {
38
  const context = useContext(playerContext)
15✔
39

40
  if (!context) {
15!
41
    throw new Error('usePlayer should be within PlayerContext Provider')
×
42
  }
43

44
  return context
15✔
45
}
46

47
type PlayerProviderProps = {
48
  children: JSX.Element | JSX.Element[]
49
}
50

51
function PlayerProvider({ children }: PlayerProviderProps) {
52
  const { sessionToken } = useAuthorization()
1✔
53
  const { selectedUniverse } = useGameInfo()
1✔
54

55
  const [player, setPlayer] = useState<PlayerType>()
1✔
56
  const [createPlayerTaskId, setCreatePlayerTaskId] = useState<string>()
1✔
57
  const [isPlayerLoading, setIsPlayerLoading] = useState(true)
1✔
58

59
  // logout
60
  useEffect(() => {
1✔
61
    if (!sessionToken) {
1!
62
      setPlayer(undefined)
1✔
63
    }
64
  }, [sessionToken])
65

66
  const { name: universeName } = selectedUniverse || {}
1✔
67

68
  const loadPlayer = useCallback(async () => {
1✔
69
    if (sessionToken && universeName) {
×
70
      const response = await getPlayer(universeName)
×
71
      const { player } = response.data
×
72

73
      setPlayer(player)
×
74
      setIsPlayerLoading(false)
×
75

76
      return { player }
×
77
    }
78
  }, [sessionToken, universeName])
79

80
  const createNewPlayer = useCallback(async (universeName: string, raceName: string) => {
1✔
81
    const response = await createPlayer(universeName, raceName)
×
82

83
    const { taskId } = response.data.task
×
84

85
    setCreatePlayerTaskId(taskId)
×
86
  }, [])
87

88
  const selectedPlanet = player?.planets.principal
1✔
89

90
  const planetUnits = selectedPlanet?.units || []
1✔
91
  const raceUnits = player?.race.units || []
1✔
92

93
  const units = [...planetUnits, ...raceUnits]
1✔
94

95
  const value = {
1✔
96
    player,
97
    selectedPlanet,
98
    loadPlayer,
99
    createNewPlayer,
100
    isPlayerLoading,
101
    createPlayerTaskId,
102

103
    units,
104
    raceUnits,
105
    planetUnits
106
  }
107

108
  return <playerContext.Provider value={value}>{children}</playerContext.Provider>
1✔
109
}
110

111
export { usePlayer, PlayerProvider }
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc