"use strict";
var __assign = (this && this.__assign) || function () {
    __assign = Object.assign || function(t) {
        for (var s, i = 1, n = arguments.length; i < n; i++) {
            s = arguments[i];
            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
                t[p] = s[p];
        }
        return t;
    };
    return __assign.apply(this, arguments);
};
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
    return new (P || (P = Promise))(function (resolve, reject) {
        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
        step((generator = generator.apply(thisArg, _arguments || [])).next());
    });
};
var __generator = (this && this.__generator) || function (thisArg, body) {
    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
    return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
    function verb(n) { return function (v) { return step([n, v]); }; }
    function step(op) {
        if (f) throw new TypeError("Generator is already executing.");
        while (g && (g = 0, op[0] && (_ = 0)), _) try {
            if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
            if (y = 0, t) op = [op[0] & 2, t.value];
            switch (op[0]) {
                case 0: case 1: t = op; break;
                case 4: _.label++; return { value: op[1], done: false };
                case 5: _.label++; y = op[1]; op = [0]; continue;
                case 7: op = _.ops.pop(); _.trys.pop(); continue;
                default:
                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
                    if (t[2]) _.ops.pop();
                    _.trys.pop(); continue;
            }
            op = body.call(thisArg, _);
        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
    }
};
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
var react_1 = __importDefault(require("react"));
var react_2 = require("@testing-library/react");
var user_event_1 = __importDefault(require("@testing-library/user-event"));
var classnames_1 = require("../constants/classnames");
var HistoryAppearanceContext_1 = require("../contexts/HistoryAppearanceContext");
var HighlightedValuesContext_1 = require("../contexts/HighlightedValuesContext");
var PivotingAttributeContext_1 = require("../contexts/PivotingAttributeContext");
var SimpleAttribute_1 = require("./SimpleAttribute");
var CollaborationContext_1 = require("../contexts/CollaborationContext");
describe('SimpleAttribute tests', function () {
    var defaultProps = {
        attributeType: { type: 'String', name: 'Name', uri: 'URI' },
        attributeValue: { value: '123', uri: 'entities/16U21B8f/attributes/Name/2sAfjGOIh' }
    };
    var defaultCollaborationContextValue = {
        commentsMap: {},
        currentComment: null
    };
    var defaultContextValues = {
        collaboration: defaultCollaborationContextValue,
        pivotingAttribute: undefined,
        highlightedValues: {
            highlightedValuesUris: [],
            highlightedClassName: 'test'
        },
        historyDiff: {}
    };
    var setUp = function (props, contextValues) {
        if (props === void 0) { props = {}; }
        if (contextValues === void 0) { contextValues = {}; }
        var user = user_event_1.default.setup();
        var _a = __assign(__assign({}, defaultContextValues), contextValues), pivotingAttribute = _a.pivotingAttribute, highlightedValues = _a.highlightedValues, historyDiff = _a.historyDiff, collaboration = _a.collaboration;
        var Providers = function (_a) {
            var children = _a.children;
            return (react_1.default.createElement(CollaborationContext_1.CollaborationContext.Provider, { value: collaboration },
                react_1.default.createElement(PivotingAttributeContext_1.PivotingAttributeContext.Provider, { value: pivotingAttribute },
                    react_1.default.createElement(HighlightedValuesContext_1.HighlightedValuesContext.Provider, { value: highlightedValues },
                        react_1.default.createElement(HistoryAppearanceContext_1.HistoryDiffContext.Provider, { value: historyDiff }, children)))));
        };
        return __assign({ user: user }, (0, react_2.render)(react_1.default.createElement(SimpleAttribute_1.SimpleAttribute, __assign({}, defaultProps, props)), { wrapper: Providers }));
    };
    it('should render DataTypeValue', function () {
        var attributeType = { type: 'String', name: 'Name', uri: 'URI' };
        var attributeValue = { value: '123', uri: 'entities/16U21B8f/attributes/Name/2sAfjGOIh' };
        setUp({ attributeType: attributeType, attributeValue: attributeValue });
        expect(react_2.screen.getByTestId('reltio-attribute-value')).toHaveTextContent('123');
    });
    it('should render lookup correctly', function () {
        var attributeType = { type: 'String', dependentLookupCode: 'Code', name: 'Name', uri: 'URI', access: ['READ'] };
        var attributeValue = {
            value: 'India',
            lookupCode: 'IN',
            rawLookupCode: 'IND',
            uri: 'entities/16U21B8f/attributes/Name/2sAfjGOIh'
        };
        setUp({ attributeType: attributeType, attributeValue: attributeValue });
        expect(react_2.screen.getByTestId('reltio-attribute-value')).toHaveTextContent('India (IN)');
    });
    it('should not render CommentsContainer if "inlined" prop is true', function () {
        var attributeType = { type: 'String', name: 'Name', uri: 'uri1' };
        var attributeValue = { value: '123', uri: 'uri1' };
        setUp({ attributeType: attributeType, attributeValue: attributeValue, inlined: true });
        expect(react_2.screen.queryByTestId('comments-container-visibility-area')).not.toBeInTheDocument();
    });
    it('should provide history className', function () {
        var attrType = { type: 'String', name: 'Name', uri: 'testAttributeUri' };
        var attributeValue = { value: '123', uri: 'testAttributeUri' };
        var historyDiff = {
            appearance: { testAttributeUri: 'INSERT_ATTRIBUTE' },
            attributes: {},
            roles: [],
            tags: []
        };
        setUp({ attributeType: attrType, attributeValue: attributeValue }, { historyDiff: historyDiff });
        expect(react_2.screen.getByTestId('reltio-attribute-value')).toHaveClass('insertAttribute');
    });
    it('should render PivotingTooltip with history', function () { return __awaiter(void 0, void 0, void 0, function () {
        var attrType, attributeValue, historyDiff, pivotingAttribute;
        return __generator(this, function (_a) {
            attrType = { type: 'String', name: 'Name', uri: 'testAttributeUri' };
            attributeValue = { value: '123', uri: 'entities/16U21B8f/attributes/Name/2sAfjGOIh' };
            historyDiff = {
                appearance: { testAttributeUri: 'INSERT_ATTRIBUTE' },
                attributes: {},
                roles: [],
                tags: []
            };
            pivotingAttribute = [{ uri: 'testAttributeUri' }];
            setUp({ attributeType: attrType, attributeValue: attributeValue }, { historyDiff: historyDiff, pivotingAttribute: pivotingAttribute });
            expect(react_2.screen.getByTestId('SvgPivotingIcon')).toBeInTheDocument();
            expect(react_2.screen.getByRole('link')).toHaveTextContent('123');
            return [2 /*return*/];
        });
    }); });
    it('should render PivotingTooltip without history', function () {
        var attributeType = { type: 'String', name: 'Name', uri: 'testAttributeUri' };
        var attributeValue = { value: '123', uri: 'entities/16U21B8f/attributes/Name/2sAfjGOIh' };
        var pivotingAttribute = [{ uri: 'testAttributeUri' }];
        setUp({ attributeType: attributeType, attributeValue: attributeValue }, { historyDiff: {}, pivotingAttribute: pivotingAttribute });
        expect(react_2.screen.getByTestId('SvgPivotingIcon')).toBeInTheDocument();
        expect(react_2.screen.getByRole('link')).toHaveTextContent('123');
    });
    it('should render comments correctly for entity type', function () {
        var attributeType = { type: 'String', name: 'Name', uri: 'uri1' };
        var attributeValue = { value: '123', uri: 'entities/uri1/attributes/ABCD' };
        var commentsMap = {
            'entities/uri1/attributes/ABCD': [{ commentId: 'commentId', status: 'open', replies: 0 }]
        };
        setUp({ attributeType: attributeType, attributeValue: attributeValue }, { collaboration: __assign(__assign({}, defaultCollaborationContextValue), { commentsMap: commentsMap }) });
        expect(react_2.screen.getByTestId('comments-container-visibility-area')).toHaveClass(classnames_1.COMMENTS_CONTAINER_VISIBILITY_AREA);
        expect(react_2.screen.getByText('123')).toBeInTheDocument();
        expect(react_2.screen.getByTestId('comments-container')).toBeInTheDocument();
        expect(react_2.screen.getByTestId('SvgAddComment')).toBeInTheDocument();
        expect(react_2.screen.getByTestId('reltio-comment-button')).toBeInTheDocument();
    });
    it('should render comments correctly for relation type', function () {
        var attributeType = {
            uri: 'configuration/relationTypes/HCPtoHCP/attributes/AffiliationStatus',
            type: 'String',
            name: 'AffiliationStatus',
            label: 'Affiliation Status'
        };
        var attributeValue = {
            type: attributeType.uri,
            uri: 'relations/12rMNliU/attributes/AffiliationSubType/3e6txxgYJ',
            value: 'Active',
            ov: true
        };
        var commentsMap = {
            'relations/12rMNliU/attributes/AffiliationSubType/3e6txxgYJ': [
                { commentId: 'commentId', status: 'open', replies: 0 }
            ]
        };
        setUp({ attributeType: attributeType, attributeValue: attributeValue }, { collaboration: __assign(__assign({}, defaultCollaborationContextValue), { commentsMap: commentsMap }) });
        expect(react_2.screen.getByTestId('comments-container-visibility-area')).toHaveClass(classnames_1.COMMENTS_CONTAINER_VISIBILITY_AREA);
        expect(react_2.screen.getByTestId('comments-container')).toBeInTheDocument();
        expect(react_2.screen.getByTestId('SvgAddComment')).toBeInTheDocument();
        expect(react_2.screen.getByTestId('reltio-comment-button')).toBeInTheDocument();
    });
    it('should render highlighted label', function () {
        var attributeType = { type: 'String', name: 'Name', uri: 'testAttributeUri', label: 'Affiliation Status' };
        var attributeValue = { value: '123', uri: 'entities/16U21B8f/attributes/Name/2sAfjGOIh' };
        var highlightedValues = {
            highlightedValuesUris: [attributeValue.uri],
            highlightedClassName: 'hlClassName'
        };
        setUp({ attributeType: attributeType, attributeValue: attributeValue }, { highlightedValues: highlightedValues });
        var container = react_2.screen.getByTestId('comments-container-visibility-area');
        expect(container).toHaveClass('hlClassName');
        expect(container).toHaveTextContent('123');
    });
    it('should render label without highlights', function () {
        var attributeType = { type: 'String', name: 'Name', uri: 'testAttributeUri', label: 'Affiliation Status' };
        var attributeValue = { value: '123', uri: 'entities/16U21B8f/attributes/Name/2sAfjGOIh' };
        var highlightedValues = {
            highlightedValuesUris: ['testAttributeUr'],
            highlightedClassName: 'hlClassName'
        };
        setUp({ attributeType: attributeType, attributeValue: attributeValue }, { highlightedValues: highlightedValues });
        var container = react_2.screen.getByTestId('comments-container-visibility-area');
        expect(container).not.toHaveClass('hlClassName');
        expect(container).toHaveTextContent('123');
    });
    it('should add ovFalse style if inlined is true', function () {
        var attributeType = { type: 'String', name: 'Name', uri: 'uri1' };
        var attributeValue = { value: '123', uri: 'uri1', ov: false };
        setUp({ attributeType: attributeType, attributeValue: attributeValue, inlined: true });
        expect(react_2.screen.getByTestId('reltio-attribute-value')).toHaveClass('ovFalse');
    });
    it('should add ovFalse style if inlined is false', function () {
        var attributeType = { type: 'String', name: 'Name', uri: 'uri1' };
        var attributeValue = { value: '123', uri: 'uri1', ov: false };
        setUp({ attributeType: attributeType, attributeValue: attributeValue, inlined: false });
        expect(react_2.screen.getByTestId('reltio-attribute-value')).toHaveClass('ovFalse');
    });
});
