public static Builder builder() {
    return new Builder();
  }
@Test
  public void testRoundTripSerDe() throws JsonProcessingException {
    // Full request
    String fullJson = "{\"removed\":[\"foo\"],\"updated\":[\"owner\"],\"missing\":[\"bar\"]}";
    assertRoundTripSerializesEquallyFrom(
        fullJson,
        UpdateNamespacePropertiesResponse.builder()
            .addUpdated(UPDATED)
            .addRemoved(REMOVED)
            .addMissing(MISSING)
            .build());

    // Only updated
    String jsonOnlyUpdated = "{\"removed\":[],\"updated\":[\"owner\"],\"missing\":[]}";
    assertRoundTripSerializesEquallyFrom(
        jsonOnlyUpdated, UpdateNamespacePropertiesResponse.builder().addUpdated(UPDATED).build());
    assertRoundTripSerializesEquallyFrom(
        jsonOnlyUpdated, UpdateNamespacePropertiesResponse.builder().addUpdated("owner").build());

    assertRoundTripSerializesEquallyFrom(
        jsonOnlyUpdated,
        UpdateNamespacePropertiesResponse.builder()
            .addUpdated(UPDATED)
            .addMissing(EMPTY_LIST)
            .addRemoved(EMPTY_LIST)
            .build());

    // Only removed
    String jsonOnlyRemoved = "{\"removed\":[\"foo\"],\"updated\":[],\"missing\":[]}";
    assertRoundTripSerializesEquallyFrom(
        jsonOnlyRemoved, UpdateNamespacePropertiesResponse.builder().addRemoved(REMOVED).build());
    assertRoundTripSerializesEquallyFrom(
        jsonOnlyRemoved, UpdateNamespacePropertiesResponse.builder().addRemoved("foo").build());

    assertRoundTripSerializesEquallyFrom(
        jsonOnlyRemoved,
        UpdateNamespacePropertiesResponse.builder()
            .addRemoved(REMOVED)
            .addUpdated(EMPTY_LIST)
            .addMissing(EMPTY_LIST)
            .build());

    // Only missing
    String jsonOnlyMissing = "{\"removed\":[],\"updated\":[],\"missing\":[\"bar\"]}";
    assertRoundTripSerializesEquallyFrom(
        jsonOnlyMissing, UpdateNamespacePropertiesResponse.builder().addMissing(MISSING).build());

    assertRoundTripSerializesEquallyFrom(
        jsonOnlyMissing, UpdateNamespacePropertiesResponse.builder().addMissing("bar").build());

    assertRoundTripSerializesEquallyFrom(
        jsonOnlyMissing,
        UpdateNamespacePropertiesResponse.builder()
            .addMissing(MISSING)
            .addUpdated(EMPTY_LIST)
            .addRemoved(EMPTY_LIST)
            .build());

    // All fields are empty
    String jsonWithAllFieldsAsEmptyList = "{\"removed\":[],\"updated\":[],\"missing\":[]}";
    assertRoundTripSerializesEquallyFrom(
        jsonWithAllFieldsAsEmptyList, UpdateNamespacePropertiesResponse.builder().build());
  }