//
//  Copyright (c) 2018 Open Whisper Systems. All rights reserved.
//

#import "OWSDisappearingMessagesConfiguration.h"
#import "SSKBaseTestObjC.h"

NS_ASSUME_NONNULL_BEGIN

@interface OWSDisappearingMessagesConfigurationTest : SSKBaseTestObjC

@end

@implementation OWSDisappearingMessagesConfigurationTest

- (void)testDictionaryValueDidChange
{
    OWSDisappearingMessagesConfiguration *configuration =
        [[OWSDisappearingMessagesConfiguration alloc] initWithThreadId:@"fake-thread-id"
                                                               enabled:YES
                                                       durationSeconds:10];
    XCTAssertFalse(configuration.dictionaryValueDidChange);

    [configuration save];
    XCTAssertFalse(configuration.dictionaryValueDidChange);

    configuration.enabled = NO;
    XCTAssertTrue(configuration.dictionaryValueDidChange);

    configuration.enabled = YES;
    XCTAssertFalse(configuration.dictionaryValueDidChange);

    OWSDisappearingMessagesConfiguration *reloadedConfiguration =
        [OWSDisappearingMessagesConfiguration fetchObjectWithUniqueID:@"fake-thread-id"];
    XCTAssertNotNil(reloadedConfiguration); // Sanity Check.
    XCTAssertFalse(reloadedConfiguration.dictionaryValueDidChange);

    reloadedConfiguration.durationSeconds = 30;
    XCTAssertTrue(reloadedConfiguration.dictionaryValueDidChange);

    reloadedConfiguration.durationSeconds = 10;
    XCTAssertFalse(reloadedConfiguration.dictionaryValueDidChange);
}

- (void)testDontStoreEphemeralProperties
{
    OWSDisappearingMessagesConfiguration *configuration =
        [[OWSDisappearingMessagesConfiguration alloc] initWithThreadId:@"fake-thread-id"
                                                               enabled:YES
                                                       durationSeconds:10];


    // Unfortunately this test will break every time you add, remove, or rename a property, but on the
    // plus side it has a chance of catching when you indadvertently remove our ephemeral properties
    // from our Mantle storage blacklist.
    NSArray<NSString *> *expected = @[ @"enabled", @"durationSeconds", @"uniqueId" ];

    XCTAssertEqualObjects(expected, [configuration.dictionaryValue allKeys]);
}

@end

NS_ASSUME_NONNULL_END
