//
//  PaymentTests.swift
//  PadelClubTests
//
//  Created by Laurent Morvillier on 01/05/2024.
//

import XCTest
@testable import PadelClub

final class PaymentTests: XCTestCase {

    override func setUpWithError() throws {
        // Put setup code here. This method is called before the invocation of each test method in the class.
    }

    override func tearDownWithError() throws {
        // Put teardown code here. This method is called after the invocation of each test method in the class.
    }

    func testPayments() throws {

        let tournament = Tournament.fake()
        do {
            tournament.payment = .free
            var encoded = try JSONEncoder().encode(tournament)
            var decoded = try JSONDecoder().decode(Tournament.self, from: encoded)
            assert(decoded.payment == .free)
            
            tournament.payment = .subscriptionUnit
            encoded = try JSONEncoder().encode(tournament)
            decoded = try JSONDecoder().decode(Tournament.self, from: encoded)
            assert(decoded.payment == .subscriptionUnit)
            
            tournament.payment = .unit
            encoded = try JSONEncoder().encode(tournament)
            decoded = try JSONDecoder().decode(Tournament.self, from: encoded)
            assert(decoded.payment == .unit)
            
            tournament.payment = .unlimited
            encoded = try JSONEncoder().encode(tournament)
            decoded = try JSONDecoder().decode(Tournament.self, from: encoded)
            assert(decoded.payment == .unlimited)
            
        } catch {
            assertionFailure(error.localizedDescription)
        }
        
    }

    func testCanceled() throws {

        let tournament = Tournament.fake()
        
        do {
            tournament.isCanceled = false
            var encoded = try JSONEncoder().encode(tournament)
            var decoded = try JSONDecoder().decode(Tournament.self, from: encoded)
            assert(decoded.isCanceled == false)
            
            tournament.isCanceled = true
            encoded = try JSONEncoder().encode(tournament)
            decoded = try JSONDecoder().decode(Tournament.self, from: encoded)
            assert(decoded.isCanceled == true)
            
        } catch {
            assertionFailure(error.localizedDescription)
        }
        
    }

}
