parent
27beca502b
commit
bd35ba54db
@ -0,0 +1,417 @@ |
|||||||
|
// |
||||||
|
// ServerDataTests.swift |
||||||
|
// PadelClubTests |
||||||
|
// |
||||||
|
// Created by Laurent Morvillier on 08/05/2024. |
||||||
|
// |
||||||
|
|
||||||
|
import XCTest |
||||||
|
import LeStorage |
||||||
|
@testable import PadelClub |
||||||
|
|
||||||
|
final class ServerDataTests: XCTestCase { |
||||||
|
|
||||||
|
let username: String = "test" |
||||||
|
|
||||||
|
|
||||||
|
override func setUpWithError() throws { |
||||||
|
Store.main.synchronizationApiURL = "http://127.0.0.1:8000/api/" |
||||||
|
} |
||||||
|
|
||||||
|
override func tearDownWithError() throws { |
||||||
|
// Put teardown code here. This method is called after the invocation of each test method in the class. |
||||||
|
} |
||||||
|
|
||||||
|
func testClub() async throws { |
||||||
|
|
||||||
|
let club = Club(name: "Aix Universite Club") |
||||||
|
club.acronym = "AUC" |
||||||
|
club.city = "Aix en provence" |
||||||
|
club.zipCode = "13100" |
||||||
|
club.code = "abc" |
||||||
|
club.address = "2 avenue de la vie" |
||||||
|
club.latitude = 13 |
||||||
|
club.longitude = 10 |
||||||
|
club.phone = "061234567890" |
||||||
|
|
||||||
|
let inserted_club: Club = try await Store.main.service().post(club) |
||||||
|
assert(inserted_club.name == club.name) |
||||||
|
assert(inserted_club.acronym == club.acronym) |
||||||
|
assert(inserted_club.zipCode == club.zipCode) |
||||||
|
assert(inserted_club.address == club.address) |
||||||
|
assert(inserted_club.latitude == club.latitude) |
||||||
|
assert(inserted_club.longitude == club.longitude) |
||||||
|
assert(inserted_club.phone == club.phone) |
||||||
|
|
||||||
|
inserted_club.phone = "123456" |
||||||
|
|
||||||
|
let updated_club: Club = try await Store.main.service().put(inserted_club) |
||||||
|
assert(updated_club.phone == inserted_club.phone) |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
func testUserCreation() async throws { |
||||||
|
|
||||||
|
let userCreationForm = UserCreationForm(username: self.username, password: "MyPass1234--", firstName: "jean", lastName: "coco", email: "laurent@staxriver.com", phone: "0123", country: "France") |
||||||
|
let user: User = try await Store.main.service().createAccount(user: userCreationForm) |
||||||
|
|
||||||
|
assert(user.username == userCreationForm.username) |
||||||
|
assert(user.firstName == userCreationForm.firstName) |
||||||
|
assert(user.lastName == userCreationForm.lastName) |
||||||
|
assert(user.email == userCreationForm.email) |
||||||
|
assert(user.phone == userCreationForm.phone) |
||||||
|
assert(user.country == userCreationForm.country) |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
func createUser() async throws -> User { |
||||||
|
let userCreationForm = UserCreationForm(username: "test", password: "MyPass1234--", firstName: "jean", lastName: "coco", email: "laurent@staxriver.com", phone: "0123", country: "France") |
||||||
|
return try await Store.main.service().createAccount(user: userCreationForm) |
||||||
|
} |
||||||
|
|
||||||
|
func testLogin() async throws { |
||||||
|
|
||||||
|
let user: User = try await Store.main.service().login(username: "test", password: "MyPass1234--") |
||||||
|
assert(user.username == "test") |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
func login() async throws { |
||||||
|
let _: User = try await Store.main.service().login(username: "test", password: "MyPass1234--") |
||||||
|
} |
||||||
|
|
||||||
|
func testEvent() async throws { |
||||||
|
|
||||||
|
do { |
||||||
|
try await self.login() |
||||||
|
} catch { |
||||||
|
let _ = try await self.createUser() |
||||||
|
try await self.login() |
||||||
|
} |
||||||
|
|
||||||
|
guard let userId = Store.main.currentUserUUID?.uuidString else { |
||||||
|
assertionFailure("missing user UUID") |
||||||
|
return |
||||||
|
} |
||||||
|
|
||||||
|
let clubs: [Club] = try await Store.main.service().get() |
||||||
|
guard let clubId = clubs.first?.id else { |
||||||
|
assertionFailure("missing club in database") |
||||||
|
return |
||||||
|
} |
||||||
|
|
||||||
|
let event = Event(creator: userId, club: clubId, name: "Roland Garros", tenupId: "abc") |
||||||
|
let e = try await Store.main.service().post(event) |
||||||
|
|
||||||
|
assert(e.name == event.name) |
||||||
|
assert(e.tenupId == event.tenupId) |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
func testTournament() async throws { |
||||||
|
|
||||||
|
do { |
||||||
|
try await self.login() |
||||||
|
} catch { |
||||||
|
let _ = try await self.createUser() |
||||||
|
try await self.login() |
||||||
|
} |
||||||
|
|
||||||
|
let event: [Event] = try await Store.main.service().get() |
||||||
|
guard let eventId = event.first?.id else { |
||||||
|
assertionFailure("missing event in database") |
||||||
|
return |
||||||
|
} |
||||||
|
|
||||||
|
let tournament = Tournament(event: eventId, name: "RG Homme", startDate: Date(), endDate: nil, creationDate: Date(), isPrivate: false, groupStageFormat: MatchFormat.megaTie, roundFormat: MatchFormat.nineGames, loserRoundFormat: MatchFormat.nineGamesDecisivePoint, groupStageSortMode: GroupStageOrderingMode.snake, groupStageCount: 2, rankSourceDate: Date(), dayDuration: 5, teamCount: 3, teamSorting: TeamSortingType.rank, federalCategory: TournamentCategory.mix, federalLevelCategory: TournamentLevel.p1000, federalAgeCategory: FederalTournamentAge.a45, groupStageCourtCount: 6, closedRegistrationDate: Date(), groupStageAdditionalQualified: 4, courtCount: 9, prioritizeClubMembers: true, qualifiedPerGroupStage: 1, teamsPerGroupStage: 2, entryFee: 30.0, additionalEstimationDuration: 5, isDeleted: true) |
||||||
|
let t = try await Store.main.service().post(tournament) |
||||||
|
|
||||||
|
assert(t.event == tournament.event) |
||||||
|
assert(t.name == tournament.name) |
||||||
|
assert(t.startDate.formatted() == tournament.startDate.formatted()) |
||||||
|
assert(t.endDate?.formatted() == tournament.endDate?.formatted()) |
||||||
|
assert(t.creationDate.formatted() == tournament.creationDate.formatted()) |
||||||
|
assert(t.isPrivate == tournament.isPrivate) |
||||||
|
assert(t.groupStageFormat == tournament.groupStageFormat) |
||||||
|
assert(t.roundFormat == tournament.roundFormat) |
||||||
|
assert(t.loserRoundFormat == tournament.loserRoundFormat) |
||||||
|
assert(t.groupStageSortMode == tournament.groupStageSortMode) |
||||||
|
assert(t.groupStageCount == tournament.groupStageCount) |
||||||
|
assert(t.rankSourceDate?.formatted() == tournament.rankSourceDate?.formatted()) |
||||||
|
assert(t.dayDuration == tournament.dayDuration) |
||||||
|
assert(t.teamCount == tournament.teamCount) |
||||||
|
assert(t.teamSorting == tournament.teamSorting) |
||||||
|
assert(t.federalCategory == tournament.federalCategory) |
||||||
|
assert(t.federalLevelCategory == tournament.federalLevelCategory) |
||||||
|
assert(t.federalAgeCategory == tournament.federalAgeCategory) |
||||||
|
assert(t.groupStageCourtCount == tournament.groupStageCourtCount) |
||||||
|
assert(t.closedRegistrationDate?.formatted() == tournament.closedRegistrationDate?.formatted()) |
||||||
|
assert(t.groupStageAdditionalQualified == tournament.groupStageAdditionalQualified) |
||||||
|
assert(t.courtCount == tournament.courtCount) |
||||||
|
assert(t.prioritizeClubMembers == tournament.prioritizeClubMembers) |
||||||
|
assert(t.qualifiedPerGroupStage == tournament.qualifiedPerGroupStage) |
||||||
|
assert(t.teamsPerGroupStage == tournament.teamsPerGroupStage) |
||||||
|
assert(t.entryFee == tournament.entryFee) |
||||||
|
assert(t.additionalEstimationDuration == tournament.additionalEstimationDuration) |
||||||
|
assert(t.isDeleted == tournament.isDeleted) |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
func testGroupStage() async throws { |
||||||
|
|
||||||
|
do { |
||||||
|
try await self.login() |
||||||
|
} catch { |
||||||
|
let _ = try await self.createUser() |
||||||
|
try await self.login() |
||||||
|
} |
||||||
|
|
||||||
|
let tournament: [Tournament] = try await Store.main.service().get() |
||||||
|
guard let tournamentId = tournament.first?.id else { |
||||||
|
assertionFailure("missing tournament in database") |
||||||
|
return |
||||||
|
} |
||||||
|
|
||||||
|
let groupStage = GroupStage(tournament: tournamentId, index: 2, size: 3, matchFormat: MatchFormat.nineGames, startDate: Date(), name: "Yeah!") |
||||||
|
let gs: GroupStage = try await Store.main.service().post(groupStage) |
||||||
|
|
||||||
|
assert(gs.tournament == groupStage.tournament) |
||||||
|
assert(gs.name == groupStage.name) |
||||||
|
assert(gs.index == groupStage.index) |
||||||
|
assert(gs.size == groupStage.size) |
||||||
|
assert(gs.matchFormat == groupStage.matchFormat) |
||||||
|
assert(gs.startDate != nil) |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
func testRound() async throws { |
||||||
|
|
||||||
|
do { |
||||||
|
try await self.login() |
||||||
|
} catch { |
||||||
|
let _ = try await self.createUser() |
||||||
|
try await self.login() |
||||||
|
} |
||||||
|
|
||||||
|
let tournament: [Tournament] = try await Store.main.service().get() |
||||||
|
guard let tournamentId = tournament.first?.id else { |
||||||
|
assertionFailure("missing tournament in database") |
||||||
|
return |
||||||
|
} |
||||||
|
let rounds: [Round] = try await Store.main.service().get() |
||||||
|
let parentRoundId = rounds.first?.id |
||||||
|
|
||||||
|
let round = Round(tournament: tournamentId, index: 1, parent: parentRoundId, matchFormat: MatchFormat.nineGames, startDate: Date()) |
||||||
|
let r: Round = try await Store.main.service().post(round) |
||||||
|
|
||||||
|
assert(r.tournament == round.tournament) |
||||||
|
assert(r.index == round.index) |
||||||
|
assert(r.parent == round.parent) |
||||||
|
assert(r.matchFormat == round.matchFormat) |
||||||
|
assert(r.startDate != nil) |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
func testTeamRegistration() async throws { |
||||||
|
|
||||||
|
do { |
||||||
|
try await self.login() |
||||||
|
} catch { |
||||||
|
let _ = try await self.createUser() |
||||||
|
try await self.login() |
||||||
|
} |
||||||
|
|
||||||
|
let tournament: [Tournament] = try await Store.main.service().get() |
||||||
|
guard let tournamentId = tournament.first?.id else { |
||||||
|
assertionFailure("missing tournament in database") |
||||||
|
return |
||||||
|
} |
||||||
|
let groupStages: [GroupStage] = try await Store.main.service().get() |
||||||
|
guard let groupStageId = groupStages.first?.id else { |
||||||
|
assertionFailure("missing groupStage in database") |
||||||
|
return |
||||||
|
} |
||||||
|
|
||||||
|
let teamRegistration = TeamRegistration(tournament: tournamentId, groupStage: groupStageId, registrationDate: Date(), callDate: Date(), bracketPosition: 1, groupStagePosition: 2, comment: "comment", source: "source", sourceValue: "source V", logo: "logo", name: "Stax", walkOut: true, wildCardBracket: true, wildCardGroupStage: true, weight: 1, lockWeight: 11, confirmationDate: Date(), qualified: true) |
||||||
|
|
||||||
|
let tr: TeamRegistration = try await Store.main.service().post(teamRegistration) |
||||||
|
|
||||||
|
assert(tr.tournament == teamRegistration.tournament) |
||||||
|
assert(tr.groupStage == teamRegistration.groupStage) |
||||||
|
assert(tr.registrationDate != nil) |
||||||
|
assert(tr.callDate != nil) |
||||||
|
assert(tr.bracketPosition == teamRegistration.bracketPosition) |
||||||
|
assert(tr.groupStagePosition == teamRegistration.groupStagePosition) |
||||||
|
assert(tr.comment == teamRegistration.comment) |
||||||
|
assert(tr.source == teamRegistration.source) |
||||||
|
assert(tr.sourceValue == teamRegistration.sourceValue) |
||||||
|
assert(tr.logo == teamRegistration.logo) |
||||||
|
assert(tr.name == teamRegistration.name) |
||||||
|
assert(tr.walkOut == teamRegistration.walkOut) |
||||||
|
assert(tr.wildCardBracket == teamRegistration.wildCardBracket) |
||||||
|
assert(tr.wildCardGroupStage == teamRegistration.wildCardGroupStage) |
||||||
|
assert(tr.weight == teamRegistration.weight) |
||||||
|
assert(tr.lockWeight == teamRegistration.lockWeight) |
||||||
|
// assert(tr.confirmationDate != nil) |
||||||
|
assert(tr.qualified == teamRegistration.qualified) |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
func testPlayerRegistration() async throws { |
||||||
|
|
||||||
|
do { |
||||||
|
try await self.login() |
||||||
|
} catch { |
||||||
|
let _ = try await self.createUser() |
||||||
|
try await self.login() |
||||||
|
} |
||||||
|
|
||||||
|
let teamRegistrations: [TeamRegistration] = try await Store.main.service().get() |
||||||
|
guard let teamRegistrationId = teamRegistrations.first?.id else { |
||||||
|
assertionFailure("missing teamRegistrations in database") |
||||||
|
return |
||||||
|
} |
||||||
|
|
||||||
|
let playerRegistration = PlayerRegistration(teamRegistration: teamRegistrationId, firstName: "juan", lastName: "lebron", licenceId: "123", rank: 11, paymentType: PlayerRegistration.PlayerPaymentType.cash, sex: PlayerRegistration.PlayerSexType.male, tournamentPlayed: 2, points: 33, clubName: "le club", ligueName: "la league", assimilation: "ass", phoneNumber: "123123", email: "email@email.com", birthdate: nil, computedRank: 222, source: PlayerRegistration.PlayerDataSource.frenchFederation, hasArrived: true) |
||||||
|
let pr: PlayerRegistration = try await Store.main.service().post(playerRegistration) |
||||||
|
|
||||||
|
assert(pr.teamRegistration == playerRegistration.teamRegistration) |
||||||
|
assert(pr.firstName == playerRegistration.firstName) |
||||||
|
assert(pr.lastName == playerRegistration.lastName) |
||||||
|
assert(pr.licenceId == playerRegistration.licenceId) |
||||||
|
assert(pr.rank == playerRegistration.rank) |
||||||
|
assert(pr.paymentType == playerRegistration.paymentType) |
||||||
|
assert(pr.sex == playerRegistration.sex) |
||||||
|
assert(pr.tournamentPlayed == playerRegistration.tournamentPlayed) |
||||||
|
assert(pr.points == playerRegistration.points) |
||||||
|
assert(pr.clubName == playerRegistration.clubName) |
||||||
|
assert(pr.ligueName == playerRegistration.ligueName) |
||||||
|
assert(pr.assimilation == playerRegistration.assimilation) |
||||||
|
assert(pr.phoneNumber == playerRegistration.phoneNumber) |
||||||
|
assert(pr.birthdate == playerRegistration.birthdate) |
||||||
|
assert(pr.computedRank == playerRegistration.computedRank) |
||||||
|
assert(pr.source == playerRegistration.source) |
||||||
|
assert(pr.hasArrived == playerRegistration.hasArrived) |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
func testMatch() async throws { |
||||||
|
|
||||||
|
do { |
||||||
|
try await self.login() |
||||||
|
} catch { |
||||||
|
let _ = try await self.createUser() |
||||||
|
try await self.login() |
||||||
|
} |
||||||
|
|
||||||
|
let teamRegistrations: [TeamRegistration] = try await Store.main.service().get() |
||||||
|
guard let teamRegistrationId = teamRegistrations.first?.id else { |
||||||
|
assertionFailure("missing teamRegistrations in database") |
||||||
|
return |
||||||
|
} |
||||||
|
let rounds: [Round] = try await Store.main.service().get() |
||||||
|
let parentRoundId = rounds.first?.id |
||||||
|
|
||||||
|
let match: Match = Match(round: parentRoundId, groupStage: nil, startDate: Date(), endDate: Date(), index: 2, matchFormat: MatchFormat.twoSets, servingTeamId: teamRegistrationId, winningTeamId: teamRegistrationId, losingTeamId: teamRegistrationId, disabled: true, courtIndex: 1) |
||||||
|
let m: Match = try await Store.main.service().post(match) |
||||||
|
|
||||||
|
assert(m.round == match.round) |
||||||
|
assert(m.groupStage == match.groupStage) |
||||||
|
assert(m.startDate != nil) |
||||||
|
assert(m.endDate != nil) |
||||||
|
assert(m.index == match.index) |
||||||
|
assert(m.matchFormat == match.matchFormat) |
||||||
|
assert(m.servingTeamId == match.servingTeamId) |
||||||
|
assert(m.winningTeamId == match.winningTeamId) |
||||||
|
assert(m.losingTeamId == match.losingTeamId) |
||||||
|
assert(m.disabled == match.disabled) |
||||||
|
assert(m.courtIndex == match.courtIndex) |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
func testTeamScore() async throws { |
||||||
|
|
||||||
|
do { |
||||||
|
try await self.login() |
||||||
|
} catch { |
||||||
|
let _ = try await self.createUser() |
||||||
|
try await self.login() |
||||||
|
} |
||||||
|
|
||||||
|
let matches: [Match] = try await Store.main.service().get() |
||||||
|
guard let matchId = matches.first?.id else { |
||||||
|
assertionFailure("missing match in database") |
||||||
|
return |
||||||
|
} |
||||||
|
let teamRegistrations: [TeamRegistration] = try await Store.main.service().get() |
||||||
|
guard let teamRegistrationId = teamRegistrations.first?.id else { |
||||||
|
assertionFailure("missing teamRegistrations in database") |
||||||
|
return |
||||||
|
} |
||||||
|
let playerRegistrations: [PlayerRegistration] = try await Store.main.service().get() |
||||||
|
let regs = playerRegistrations.prefix(upTo: 2).map { $0.id } |
||||||
|
|
||||||
|
let teamScore = TeamScore(match: matchId, teamRegistration: teamRegistrationId, playerRegistrations: regs, score: "6/6", walkOut: 1, luckyLoser: 1) |
||||||
|
let ts: TeamScore = try await Store.main.service().post(teamScore) |
||||||
|
|
||||||
|
assert(ts.match == teamScore.match) |
||||||
|
assert(ts.teamRegistration == teamScore.teamRegistration) |
||||||
|
assert(ts.playerRegistrations == teamScore.playerRegistrations) |
||||||
|
assert(ts.score == teamScore.score) |
||||||
|
assert(ts.walkOut == teamScore.walkOut) |
||||||
|
assert(ts.luckyLoser == teamScore.luckyLoser) |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
func testCourt() async throws { |
||||||
|
|
||||||
|
do { |
||||||
|
try await self.login() |
||||||
|
} catch { |
||||||
|
let _ = try await self.createUser() |
||||||
|
try await self.login() |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
let clubs: [Club] = try await Store.main.service().get() |
||||||
|
guard let clubId = clubs.first?.id else { |
||||||
|
assertionFailure("missing club in database") |
||||||
|
return |
||||||
|
} |
||||||
|
|
||||||
|
let court = Court(index: 1, club: clubId, name: "Philippe Chatrier", exitAllowed: true, indoor: true) |
||||||
|
let c: Court = try await Store.main.service().post(court) |
||||||
|
|
||||||
|
assert(c.club == court.club) |
||||||
|
assert(c.name == court.name) |
||||||
|
assert(c.index == court.index) |
||||||
|
assert(c.exitAllowed == court.exitAllowed) |
||||||
|
assert(c.indoor == court.indoor) |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
func testDateInterval() async throws { |
||||||
|
|
||||||
|
do { |
||||||
|
try await self.login() |
||||||
|
} catch { |
||||||
|
let _ = try await self.createUser() |
||||||
|
try await self.login() |
||||||
|
} |
||||||
|
|
||||||
|
let event: [Event] = try await Store.main.service().get() |
||||||
|
guard let eventId = event.first?.id else { |
||||||
|
assertionFailure("missing event in database") |
||||||
|
return |
||||||
|
} |
||||||
|
|
||||||
|
let dateInterval = DateInterval(event: eventId, courtIndex: 1, startDate: Date(), endDate: Date()) |
||||||
|
let di: PadelClub.DateInterval = try await Store.main.service().post(dateInterval) |
||||||
|
|
||||||
|
assert(di.event == dateInterval.event) |
||||||
|
assert(di.courtIndex == dateInterval.courtIndex) |
||||||
|
assert(di.startDate.formatted() == dateInterval.startDate.formatted()) |
||||||
|
assert(di.endDate.formatted() == dateInterval.endDate.formatted()) |
||||||
|
|
||||||
|
} |
||||||
|
} |
||||||
Loading…
Reference in new issue