/*
 * Copyright OpenSearch Contributors
 * SPDX-License-Identifier: Apache-2.0
 */

package org.opensearch.securityanalytics.mapper.action.mapping;

import org.opensearch.action.ActionRequestValidationException;
import org.opensearch.common.io.stream.BytesStreamOutput;
import org.opensearch.common.io.stream.StreamInput;
import org.opensearch.common.xcontent.json.JsonXContent;
import org.opensearch.core.xcontent.XContentParser;
import org.opensearch.securityanalytics.action.CreateIndexMappingsRequest;
import org.opensearch.test.OpenSearchTestCase;

import java.io.IOException;

public class CreateIndexMappingsRequestTests extends OpenSearchTestCase {

    public void testStreamInOut() throws IOException {
        BytesStreamOutput out = new BytesStreamOutput();

        CreateIndexMappingsRequest req = new CreateIndexMappingsRequest("my_index", "netflow", true);
        req.writeTo(out);

        StreamInput sin = StreamInput.wrap(out.bytes().toBytesRef().bytes);
        CreateIndexMappingsRequest newReq = new CreateIndexMappingsRequest(sin);

        assertEquals("my_index", newReq.getIndexName());
        assertEquals("netflow", newReq.getRuleTopic());
        assertTrue(req.getPartial());
    }

    public void testParse() throws IOException {

        String jsonPayload =
                "{" +
                "   \"index_name\":\"my_index\"," +
                "   \"rule_topic\":\"netflow\"," +
                "   \"partial\":true" +
                "}";

        XContentParser parser = createParser(JsonXContent.jsonXContent, jsonPayload);
        CreateIndexMappingsRequest req = CreateIndexMappingsRequest.parse(parser);
        assertEquals("my_index", req.getIndexName());
        assertEquals("netflow", req.getRuleTopic());
        assertTrue(req.getPartial());
    }

    public void testValidate() {
        CreateIndexMappingsRequest req = new CreateIndexMappingsRequest("my_index", "netflow", true);
        ActionRequestValidationException e = req.validate();
        assertNull(e);

        req = new CreateIndexMappingsRequest("", "", false);
        e = req.validate();
        assertNotNull(e);
    }

}