import Folder from "model/folder";
import MockAdapter from "axios-mock-adapter";
import Api from "common/api";
import {Settings} from "luxon";
Settings.defaultLocale = "en"
Settings.defaultZoneName = "UTC"

let chai = require("chai/chai");
let assert = chai.assert;

const mock = new MockAdapter(Api);

mock
    .onGet("folders/2011/10-Halloween", {"params": {"recursive": true, "uncached": true}}).reply(200, {folders: [1, 2], files: [1]}, {"x-count": "3", "x-limit": "100", "x-offset": "0"})
    .onGet("folders/2011/10-Halloween", {"params": {"recursive": true}}).reply(200, {folders: [1, 2, 3], files: [1]})
    .onGet("folders/originals/2011/10-Halloween", {"params": {"recursive": true}}).reply(200, {folders: [1, 2, 3], files: [1]});


describe("model/folder", () => {

    it("should return classes",  () => {
        const values = {
            Folder: true,
            Path: "2011/10-Halloween",
            UID: "dqbevau2zlhxrxww",
            Title: "Halloween Party",
            Favorite: true,
            Private: true,
            Ignore: false,
            Watch: false,
            FileCount: 0,
        };
        const folder = new Folder(values);
        const result = folder.classes(true);
        assert.include(result, "is-folder");
        assert.include(result, "uid-dqbevau2zlhxrxww");
        assert.include(result, "is-favorite");
        assert.include(result, "is-private");
        assert.include(result, "is-selected");
    });

    it("should get folder defaults",  () => {
        const values = {
            Folder: true,
            Path: "2011/10-Halloween",
            Root: "",
            UID: "dqbevau2zlhxrxww",
            Type: "",
            Title: "Halloween Party",
            Category: "",
            Description: "",
            Order: "",
            Country: "",
            Year: "",
            Month: "",
            Favorite: false,
            Private: false,
            Ignore: false,
            Watch: false,
            FileCount: 0,
            CreatedAt: "",
            UpdatedAt: "",
        };
        const model = new Folder(values);
        const result = model.getDefaults();
        assert.equal(result.Folder, true);
        assert.equal(result.Path, "");
        assert.equal(result.Favorite, false);
    });

    it("should get folder base name",  () => {
        const values = {
            Folder: true,
            Path: "2011/10-Halloween",
            Root: "",
            UID: "dqbevau2zlhxrxww",
            Type: "",
            Title: "Halloween Party",
            Category: "",
            Description: "",
            Order: "",
            Country: "",
            Year: "",
            Month: "",
            Favorite: false,
            Private: false,
            Ignore: false,
            Watch: false,
            FileCount: 0,
            CreatedAt: "",
            UpdatedAt: "",
        };
        const folder = new Folder(values);
        const result = folder.baseName();
        assert.equal(result, "10-Halloween");
        const result2 = folder.baseName(8);
        assert.equal(result2, "10-Hall…");
    });

    it("should return false",  () => {
        const values = {
            Folder: true,
            Path: "2011/10-Halloween",
            UID: "dqbevau2zlhxrxww",
            Title: "Halloween Party",
        };
        const folder = new Folder(values);
        assert.equal(folder.isFile(), false);
    });

    it("should return entity name",  () => {
        const values = {
            Folder: true,
            Path: "2011/10-Halloween",
            Root: "",
            UID: "dqbevau2zlhxrxww",
            Title: "Halloween Party",
        };
        const folder = new Folder(values);
        assert.equal(folder.getEntityName(), "/2011/10-Halloween");
    });

    it("should return thumbnail url",  () => {
        const values = {
            Folder: true,
            Path: "2011/10-Halloween",
            Root: "",
            UID: "dqbevau2zlhxrxww",
            Title: "Halloween Party",
        };
        const folder = new Folder(values);
        assert.equal(folder.thumbnailUrl("tile_224"), "/api/v1/folders/t/dqbevau2zlhxrxww/public/tile_224");
    });

    it("should get date string",  () => {
        const values = {
            Folder: true,
            Path: "2011/10-Halloween",
            Root: "",
            UID: "dqbevau2zlhxrxww",
            Title: "Halloween Party",
            CreatedAt: "2012-07-08T14:45:39Z",
            UpdatedAt: "2012-07-08T14:45:39Z",
        };
        const folder = new Folder(values);
        assert.equal(folder.getDateString(), "Jul 8, 2012, 2:45 PM");
    });

    it("should toggle like",  () => {
        const values = {
            Folder: true,
            Path: "2011/10-Halloween",
            Root: "",
            UID: "dqbevau2zlhxrxww",
            Title: "Halloween Party",
            Favorite: true,
            Private: true,
        };
        const folder = new Folder(values);
        assert.equal(folder.Favorite, true);
        folder.toggleLike();
        assert.equal(folder.Favorite, false);
        folder.toggleLike();
        assert.equal(folder.Favorite, true);
    });

    it("should like folder",  () => {
        const values = {
            Folder: true,
            Path: "2011/10-Halloween",
            Root: "",
            UID: "dqbevau2zlhxrxww",
            Title: "Halloween Party",
            Favorite: false,
            Private: true,
        };
        const folder = new Folder(values);
        assert.equal(folder.Favorite, false);
        folder.like();
        assert.equal(folder.Favorite, true);
    });

    it("should unlike folder",  () => {
        const values = {
            Folder: true,
            Path: "2011/10-Halloween",
            Root: "",
            UID: "dqbevau2zlhxrxww",
            Title: "Halloween Party",
            Favorite: true,
            Private: true,
        };
        const folder = new Folder(values);
        assert.equal(folder.Favorite, true);
        folder.unlike();
        assert.equal(folder.Favorite, false);
    });

    it("should get collection resource",  () => {
        const result = Folder.getCollectionResource();
        assert.equal(result, "folders");
    });

    it("should get model name",  () => {
        const result = Folder.getModelName();
        assert.equal(result, "Folder");
    });

    it("should test find all",  (done) => {
        Folder.findAll("2011/10-Halloween").then(
            (response) => {
                assert.equal(response.status, 200);
                assert.equal(response.count, 4);
                assert.equal(response.folders, 3);
                done();
            }
        ).catch(
            (error) => {
                done(error);
            }
        );
    });

    it("should test find all uncached",  (done) => {
        Folder.findAllUncached("2011/10-Halloween").then(
            (response) => {
                assert.equal(response.status, 200);
                assert.equal(response.count, 3);
                assert.equal(response.folders, 2);
                done();
            }
        ).catch(
            (error) => {
                done(error);
            }
        );
    });

    it("should test find in originals",  (done) => {
        Folder.originals("2011/10-Halloween", {recursive: true}).then(
            (response) => {
                assert.equal(response.status, 200);
                assert.equal(response.count, 4);
                assert.equal(response.folders, 3);
                done();
            }
        ).catch(
            (error) => {
                done(error);
            }
        );
    });



    it("should test search",  (done) => {
        Folder.search("2011/10-Halloween",{recursive: true, uncached: true}).then(
            (response) => {
                assert.equal(response.status, 200);
                assert.equal(response.count, 3);
                assert.equal(response.folders, 2);
                done();
            }
        ).catch(
            (error) => {
                done(error);
            }
        );
    });

});
