def test_dev_server_get_patients() -> None:
    clean_fhir_server()

    url = "http://fhir:3000/4_0_0"
    fhir_client = FhirClient()
    fhir_client = fhir_client.url(url).resource("Patient")
    resource = {
        "resourceType": "Patient",
        "id": "12355",
        "meta": {
            "security": [{
                "system": "https://www.icanbwell.com/access",
                "code": "bwell"
            }]
        },
    }
    merge_response: FhirMergeResponse = fhir_client.merge(
        [json.dumps(resource)])
    print(merge_response.responses)
    assert merge_response.status == 200, merge_response.responses
    assert merge_response.responses[0][
        "created"] is True, merge_response.responses
    fhir_client = fhir_client.url(url).resource("Patient")
    response: FhirGetResponse = fhir_client.get()
    print(response.responses)
    responses_ = json.loads(response.responses)[0]
    assert responses_["id"] == resource["id"]
    assert responses_["resourceType"] == resource["resourceType"]
def test_fhir_client_patient_merge() -> None:
    test_name = "test_fhir_client_patient_merge"

    mock_server_url = "http://mock-server:1080"
    mock_client: MockServerFriendlyClient = MockServerFriendlyClient(
        base_url=mock_server_url)

    relative_url: str = test_name
    absolute_url: str = mock_server_url + "/" + test_name

    mock_client.clear(f"/{test_name}/*.*")
    mock_client.reset()

    response_text_1: List[Dict[str, int]] = [{"created": 1, "updated": 0}]
    resource = {"resourceType": "Patient", "id": "12355"}
    # request_body = {"resourceType": "Bundle", "entry": [{"resource": resource}]}
    mock_client.expect(
        mock_request(
            path=f"/{relative_url}/Patient/1/$merge",
            method="POST",
            body=json.dumps([resource]),
        ),
        mock_response(body=json.dumps(response_text_1)),
        timing=times(1),
    )

    fhir_client = FhirClient()
    fhir_client = fhir_client.url(absolute_url).resource("Patient")
    response: FhirMergeResponse = fhir_client.merge([json.dumps(resource)])

    print(response.responses)
    assert response.responses == response_text_1
def test_fhir_client_patient_merge() -> None:
    with requests_mock.Mocker() as mock:
        url = "http://foo"
        request_data = {"resourceType": "Patient", "id": "12355"}
        response_json = [{"created": 1, "updated": 0}]

        def custom_matcher(request: Any) -> Optional[Response]:
            if request.path == "/patient/1/$merge" and request.text == json.dumps(
                [request_data]):
                resp: Response = requests.Response()
                resp.status_code = 200
                return resp
            return None

        mock.post(
            f"{url}/Patient/1/$merge",
            additional_matcher=custom_matcher,
            text=f"{json.dumps(response_json)}",
        )

        fhir_client = FhirClient()
        fhir_client = fhir_client.url(url).resource("Patient")
        response: FhirMergeResponse = fhir_client.merge(
            [json.dumps(request_data)])

        print(response.responses)
        assert response.responses == response_json