/*
 * Copyright (c) Fundacion Jala. All rights reserved.
 * Licensed under the MIT license. See LICENSE file in the project root for full license information.
 */

package org.fundacionjala.enforce.sonarqube.apex.checks;

import org.fundacionjala.enforce.sonarqube.apex.checks.unofficial.DmlInConstructorCheck;
import org.junit.Test;
import org.sonar.squidbridge.api.SourceFile;
import org.sonar.squidbridge.checks.CheckMessagesVerifier;

import java.io.File;

import static org.fundacionjala.enforce.sonarqube.apex.ApexAstScanner.scanFile;

public class DmlInConstructorCheckTest {
    
    private DmlInConstructorCheck dmlCheckInConstructor;
    private SourceFile sourceFile;

    @Test
    public void testIncorrectDMLDeclarationCorrect() throws Exception {
        dmlCheckInConstructor = new DmlInConstructorCheck();
        sourceFile = scanFile(new File("src/test/resources/checks/clazzCorrect.cls"), dmlCheckInConstructor);
        CheckMessagesVerifier.verify(sourceFile.getCheckMessages())
                .noMore();
    }

    @Test
    public void testIncorrectDMLDeclarationIncorrectInsertAndDelete() throws Exception {
        dmlCheckInConstructor = new DmlInConstructorCheck();
        sourceFile = scanFile(new File("src/test/resources/checks/clazzError.cls"), dmlCheckInConstructor);
        CheckMessagesVerifier.verify(sourceFile.getCheckMessages()).
                next().atLine(13).withMessage(
                "The DML statement \"insert\", can not be inside a constructor.")
                .next().atLine(22).withMessage(
                "The DML statement \"DELETE\", can not be inside a constructor.");
    }
}
