@@ -489,4 +489,113 @@ void postShape_missingDiscriminatorReturns400() {
489489 }
490490 }
491491 }
492+
493+ @ Nested
494+ class Filters {
495+
496+ String path = "/filters" ;
497+
498+ @ Test
499+ void postFilter_validStringValueReturns200 () {
500+ try (var server = newServer (Map .of ("post-filter" , new EchoHandler ()));
501+ var client = httpClient ()) {
502+ var body = "{\" value\" :\" abcd\" }" ;
503+ var request = newRequest (server , path , "POST" , ofString (body ));
504+
505+ var response = client .send (request , BodyHandlers .ofString ());
506+
507+ assertThat (response .statusCode ()).isEqualTo (200 );
508+ } catch (IOException e ) {
509+ fail (e );
510+ } catch (InterruptedException e ) {
511+ Thread .currentThread ().interrupt ();
512+ fail (e );
513+ }
514+ }
515+
516+ @ Test
517+ void postFilter_validIntegerValueReturns200 () {
518+ try (var server = newServer (Map .of ("post-filter" , new EchoHandler ()));
519+ var client = httpClient ()) {
520+ var body = "{\" value\" :42}" ;
521+ var request = newRequest (server , path , "POST" , ofString (body ));
522+
523+ var response = client .send (request , BodyHandlers .ofString ());
524+
525+ assertThat (response .statusCode ()).isEqualTo (200 );
526+ } catch (IOException e ) {
527+ fail (e );
528+ } catch (InterruptedException e ) {
529+ Thread .currentThread ().interrupt ();
530+ fail (e );
531+ }
532+ }
533+
534+ @ Test
535+ void postFilter_shortStringMatchesNoBranchReturns400 () {
536+ // "ab" has length < 3 (string branch fails) and is not an integer (integer branch fails).
537+ try (var server = newServer (Map .of ("post-filter" , new EchoHandler ()));
538+ var client = httpClient ()) {
539+ var body = "{\" value\" :\" ab\" }" ;
540+ var request = newRequest (server , path , "POST" , ofString (body ));
541+
542+ var response = client .send (request , BodyHandlers .ofString ());
543+
544+ assertThat (response .statusCode ()).isEqualTo (400 );
545+ assertThat (response .headers ().firstValue ("Content-Type" ).orElse ("" ))
546+ .contains ("application/problem+json" );
547+ assertThat (response .body ()).contains ("anyOf" );
548+ } catch (IOException e ) {
549+ fail (e );
550+ } catch (InterruptedException e ) {
551+ Thread .currentThread ().interrupt ();
552+ fail (e );
553+ }
554+ }
555+ }
556+
557+ @ Nested
558+ class Blocked {
559+
560+ String path = "/blocked" ;
561+
562+ @ Test
563+ void postBlocked_acceptedTokenReturns200 () {
564+ try (var server = newServer (Map .of ("post-blocked" , new EchoHandler ()));
565+ var client = httpClient ()) {
566+ var body = "{\" token\" :\" allowed\" }" ;
567+ var request = newRequest (server , path , "POST" , ofString (body ));
568+
569+ var response = client .send (request , BodyHandlers .ofString ());
570+
571+ assertThat (response .statusCode ()).isEqualTo (200 );
572+ } catch (IOException e ) {
573+ fail (e );
574+ } catch (InterruptedException e ) {
575+ Thread .currentThread ().interrupt ();
576+ fail (e );
577+ }
578+ }
579+
580+ @ Test
581+ void postBlocked_forbiddenTokenReturns400 () {
582+ try (var server = newServer (Map .of ("post-blocked" , new EchoHandler ()));
583+ var client = httpClient ()) {
584+ var body = "{\" token\" :\" forbidden\" }" ;
585+ var request = newRequest (server , path , "POST" , ofString (body ));
586+
587+ var response = client .send (request , BodyHandlers .ofString ());
588+
589+ assertThat (response .statusCode ()).isEqualTo (400 );
590+ assertThat (response .headers ().firstValue ("Content-Type" ).orElse ("" ))
591+ .contains ("application/problem+json" );
592+ assertThat (response .body ()).contains ("not" );
593+ } catch (IOException e ) {
594+ fail (e );
595+ } catch (InterruptedException e ) {
596+ Thread .currentThread ().interrupt ();
597+ fail (e );
598+ }
599+ }
600+ }
492601}
0 commit comments