// Copyright © 2022 Rangeproof Pty Ltd. All rights reserved. import Foundation import Quick import Nimble @testable import SessionMessagingKit class RoomPollInfoSpec: QuickSpec { override class func spec() { // MARK: - a RoomPollInfo describe("a RoomPollInfo") { // MARK: -- when initializing with a room context("when initializing with a room") { // MARK: ---- copies all the relevant values across it("copies all the relevant values across") { let room: OpenGroupAPI.Room = OpenGroupAPI.Room( token: "testToken", name: "testName", roomDescription: nil, infoUpdates: 123, messageSequence: 0, created: 0, activeUsers: 234, activeUsersCutoff: 0, imageId: nil, pinnedMessages: nil, admin: true, globalAdmin: true, admins: [], hiddenAdmins: nil, moderator: true, globalModerator: true, moderators: [], hiddenModerators: nil, read: true, defaultRead: true, defaultAccessible: true, write: true, defaultWrite: true, upload: true, defaultUpload: true ) let roomPollInfo: OpenGroupAPI.RoomPollInfo = OpenGroupAPI.RoomPollInfo(room: room) expect(roomPollInfo.token).to(equal(room.token)) expect(roomPollInfo.activeUsers).to(equal(room.activeUsers)) expect(roomPollInfo.admin).to(equal(room.admin)) expect(roomPollInfo.globalAdmin).to(equal(room.globalAdmin)) expect(roomPollInfo.moderator).to(equal(room.moderator)) expect(roomPollInfo.globalModerator).to(equal(room.globalModerator)) expect(roomPollInfo.read).to(equal(room.read)) expect(roomPollInfo.defaultRead).to(equal(room.defaultRead)) expect(roomPollInfo.defaultAccessible).to(equal(room.defaultAccessible)) expect(roomPollInfo.write).to(equal(room.write)) expect(roomPollInfo.defaultWrite).to(equal(room.defaultWrite)) expect(roomPollInfo.upload).to(equal(room.upload)) expect(roomPollInfo.defaultUpload).to(equal(room.defaultUpload)) expect(roomPollInfo.details).to(equal(room)) } } // MARK: -- when decoding context("when decoding") { // MARK: ---- defaults admin and moderator values to false if omitted it("defaults admin and moderator values to false if omitted") { let roomPollInfoJson: String = """ { "token": "testToken", "active_users": 0, "read": true, "default_read": true, "default_accessible": true, "write": true, "default_write": true, "upload": true, "default_upload": true, "details": null } """ let roomData: Data = roomPollInfoJson.data(using: .utf8)! let result: OpenGroupAPI.RoomPollInfo = try! JSONDecoder().decode(OpenGroupAPI.RoomPollInfo.self, from: roomData) expect(result.admin).to(beFalse()) expect(result.globalAdmin).to(beFalse()) expect(result.moderator).to(beFalse()) expect(result.globalModerator).to(beFalse()) } // MARK: ---- sets the admin and moderator values when provided it("sets the admin and moderator values when provided") { let roomPollInfoJson: String = """ { "token": "testToken", "active_users": 0, "admin": true, "global_admin": true, "moderator": true, "global_moderator": true, "read": true, "default_read": true, "default_accessible": true, "write": true, "default_write": true, "upload": true, "default_upload": true, "details": null } """ let roomData: Data = roomPollInfoJson.data(using: .utf8)! let result: OpenGroupAPI.RoomPollInfo = try! JSONDecoder().decode(OpenGroupAPI.RoomPollInfo.self, from: roomData) expect(result.admin).to(beTrue()) expect(result.globalAdmin).to(beTrue()) expect(result.moderator).to(beTrue()) expect(result.globalModerator).to(beTrue()) } } } } }