← Files Boomi Companion: Connector DevARCHIVED FILE

skills/boomi-connectordev/templates/query-operation/ExampleQueryOperationTest.java

3.63 KB · Nov 14, 2026 · 01:25 UTC

↓ Download file

package com.example.connector;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;

import java.net.InetSocketAddress;
import java.net.URLDecoder;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.boomi.connector.api.Operation;
import com.boomi.connector.api.OperationContext;
import com.boomi.connector.api.OperationStatus;
import com.boomi.connector.api.OperationType;
import com.boomi.connector.api.QueryFilter;
import com.boomi.connector.api.Sort;
import com.boomi.connector.testutil.ConnectorTester;
import com.boomi.connector.testutil.QueryFilterBuilder;
import com.boomi.connector.testutil.QueryGroupingBuilder;
import com.boomi.connector.testutil.QuerySimpleBuilder;
import com.boomi.connector.testutil.SimpleOperationResult;
import com.boomi.connector.util.BaseConnector;
import com.sun.net.httpserver.HttpServer;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

public class ExampleQueryOperationTest {

    private HttpServer _server;
    private volatile String _lastQuery;
    private ConnectorTester _tester;

    @Before
    public void setUp() throws Exception {
        _server = HttpServer.create(new InetSocketAddress("127.0.0.1", 0), 0);
        _server.createContext("/", exchange -> {
            String rawQuery = exchange.getRequestURI().getRawQuery();
            _lastQuery = rawQuery == null ? "" : URLDecoder.decode(rawQuery, "UTF-8");
            byte[] body = "[{\"id\":1},{\"id\":2}]".getBytes(StandardCharsets.UTF_8);
            exchange.sendResponseHeaders(200, body.length);
            exchange.getResponseBody().write(body);
            exchange.close();
        });
        _server.start();

        Map<String, Object> connProps = new HashMap<>();
        connProps.put("baseUrl", "http://127.0.0.1:" + _server.getAddress().getPort());
        _tester = new ConnectorTester(new BaseConnector() {
            @Override
            protected Operation createQueryOperation(OperationContext context) {
                return new ExampleQueryOperation(context);
            }
        });
        _tester.setOperationContext(OperationType.QUERY, connProps, new HashMap<>(), "Ticket", null);
    }

    @After
    public void tearDown() {
        _server.stop(0);
    }

    @Test
    public void translatesNestedFilterAndSort() {
        QueryFilter filter = new QueryFilterBuilder(
                QueryGroupingBuilder.and(
                        new QuerySimpleBuilder("status", "eq", "open"),
                        QueryGroupingBuilder.or(
                                new QuerySimpleBuilder("priority", "eq", "high"),
                                new QuerySimpleBuilder("created", "between", "2026-01-01", "2026-06-30"))))
                .toFilter()
                .withSort(new Sort().withProperty("created").withSortOrder("asc"));

        List<SimpleOperationResult> results = _tester.executeQueryOperation(filter);

        assertEquals(OperationStatus.SUCCESS, results.get(0).getStatus());
        assertEquals(2, results.get(0).getPayloads().size());
        assertEquals("filter=(status eq 'open' and (priority eq 'high' or "
                + "(created ge '2026-01-01' and created le '2026-06-30')))&orderBy=created asc", _lastQuery);
    }

    @Test
    public void rejectsUndeclaredOperator() {
        QueryFilter filter = new QueryFilterBuilder(new QuerySimpleBuilder("status", "like", "x")).toFilter();

        List<SimpleOperationResult> results = _tester.executeQueryOperation(filter);

        assertEquals(OperationStatus.APPLICATION_ERROR, results.get(0).getStatus());
        assertNull(_lastQuery);
    }
}

SHA-256: 5021546325414148298a783554c6188889718c37328ea7f30a9168cbb171ea6e