/*
* Copyright 2012 EMBL - European Bioinformatics Institute
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package uk.ac.ebi.fg.annotare2.magetabcheck.checks.idf;
import org.easymock.EasyMock;
import org.easymock.IAnswer;
import org.junit.Test;
import uk.ac.ebi.fg.annotare2.magetabcheck.efo.EfoService;
import uk.ac.ebi.fg.annotare2.magetabcheck.efo.EfoTerm;
import uk.ac.ebi.fg.annotare2.magetabcheck.efo.MageTabCheckEfo;
import uk.ac.ebi.fg.annotare2.magetabcheck.efo.MageTabCheckEfoImpl;
import uk.ac.ebi.fg.annotare2.magetabcheck.extension.KnownProtocolHardware;
import uk.ac.ebi.fg.annotare2.magetabcheck.extension.KnownTermSource;
import java.util.Collections;
import static org.easymock.EasyMock.*;
/**
* @author Olga Melnichuk
*/
public class SequencingProtocolRequiredTest extends AbstractCheckTest {
private static final String SEQUENCING_PROTOCOL_TYPE = "sequencing protocol";
@Test
public void testValidSeqProtocol() {
SequencingProtocolRequired rule = new SequencingProtocolRequired(efoServiceMock());
rule.visit(createProtocol(
"name",
"description",
Collections.<String>emptyList(),
KnownProtocolHardware.LIST.get(0),
"software",
"contact",
SEQUENCING_PROTOCOL_TYPE,
createTermSource(
KnownTermSource.EFO.name(),
KnownTermSource.EFO.getUrl())));
rule.check();
}
@Test(expected = AssertionError.class)
public void testInvalidProtocolType() {
SequencingProtocolRequired rule = new SequencingProtocolRequired(efoServiceMock());
rule.visit(createProtocol(
"name",
"description",
Collections.<String>emptyList(),
KnownProtocolHardware.LIST.get(0),
"software",
"contact",
"invalid protocol type",
createTermSource(
KnownTermSource.EFO.name(),
KnownTermSource.EFO.getUrl())));
rule.check();
}
@Test(expected = AssertionError.class)
public void testInvalidHardware() {
SequencingProtocolHardwareRequired rule = new SequencingProtocolHardwareRequired(efoServiceMock());
rule.visit(createProtocol(
"name",
"description",
Collections.<String>emptyList(),
"invalid hardware name",
"software",
"contact",
SEQUENCING_PROTOCOL_TYPE,
createTermSource(
KnownTermSource.EFO.name(),
KnownTermSource.EFO.getUrl())));
rule.check();
}
@Test(expected = AssertionError.class)
public void testInvalidProtocolTypeSource() {
SequencingProtocolRequired rule = new SequencingProtocolRequired(efoServiceMock());
rule.visit(createProtocol(
"name",
"description",
Collections.<String>emptyList(),
KnownProtocolHardware.LIST.get(0),
"software",
"contact",
SEQUENCING_PROTOCOL_TYPE,
createTermSource(
"not efo",
"unknown url")));
rule.check();
}
@Test
public void testNullProtocolTypeSource() {
SequencingProtocolRequired rule = new SequencingProtocolRequired(efoServiceMock());
rule.visit(createProtocol(
"name",
"description",
Collections.<String>emptyList(),
KnownProtocolHardware.LIST.get(0),
"software",
"contact",
SEQUENCING_PROTOCOL_TYPE,
null));
rule.check();
}
private MageTabCheckEfo efoServiceMock() {
EfoService mock = EasyMock.createMock(EfoService.class);
expect(mock.findTermByLabelOrAccession(isA(String.class), isA(String.class), isA(String.class))).andAnswer(
new IAnswer<EfoTerm>() {
@Override
public EfoTerm answer() throws Throwable {
String title = (String) getCurrentArguments()[0];
return "sequencing protocol".equals(title) ? EfoTerm.EMPTY : null;
}
}
);
replay(mock);
return new MageTabCheckEfoImpl(mock);
}
}