diff --git a/flow-push/pom.xml b/flow-push/pom.xml
index 19e15ec2694..f1e42f4c706 100644
--- a/flow-push/pom.xml
+++ b/flow-push/pom.xml
@@ -12,7 +12,7 @@
${project.name}
- ${project.build.outputDirectory}/META-INF/resources/VAADIN/static/push
+ ${project.build.outputDirectory}/META-INF/VAADIN/webapp/VAADIN/static/push
${pushDirectory}/vaadinPush.js
${pushDirectory}/vaadinPush-min.js
diff --git a/flow-server/src/test/java/com/vaadin/flow/server/StaticFileServerTest.java b/flow-server/src/test/java/com/vaadin/flow/server/StaticFileServerTest.java
index 43ea9bb8bce..e12a8f68ebf 100644
--- a/flow-server/src/test/java/com/vaadin/flow/server/StaticFileServerTest.java
+++ b/flow-server/src/test/java/com/vaadin/flow/server/StaticFileServerTest.java
@@ -1252,6 +1252,51 @@ public void serveStaticResource_themeResourceRequest_productionMode_notServeFrom
Assert.assertFalse(fileServer.serveStaticResource(request, response));
}
+ @Test
+ public void serveStaticResource_vaadinPushScript_servedFromMetaInfVaadinWebapp()
+ throws IOException {
+ String pathInfo = "/VAADIN/static/push/vaadinPush.js";
+ setupRequestURI("", "", pathInfo);
+ String fileData = "window.vaadinPush = {};";
+ ClassLoader mockLoader = Mockito.mock(ClassLoader.class);
+ Mockito.when(servletService.getClassLoader()).thenReturn(mockLoader);
+
+ // The push script should be loaded from META-INF/VAADIN/webapp/
+ // (not from META-INF/resources/VAADIN/static/push/)
+ Mockito.when(mockLoader.getResource(
+ "META-INF/VAADIN/webapp/VAADIN/static/push/vaadinPush.js"))
+ .thenReturn(createFileURLWithDataAndLength(
+ "/push/vaadinPush.js", fileData));
+
+ mockStatsBundles(mockLoader);
+ mockConfigurationPolyfills();
+
+ Assert.assertTrue(fileServer.serveStaticResource(request, response));
+ Assert.assertEquals(fileData, out.getOutputString());
+ }
+
+ @Test
+ public void serveStaticResource_vaadinPushMinScript_servedFromMetaInfVaadinWebapp()
+ throws IOException {
+ String pathInfo = "/VAADIN/static/push/vaadinPush-min.js";
+ setupRequestURI("", "", pathInfo);
+ String fileData = "window.vaadinPush={};";
+ ClassLoader mockLoader = Mockito.mock(ClassLoader.class);
+ Mockito.when(servletService.getClassLoader()).thenReturn(mockLoader);
+
+ // The push script should be loaded from META-INF/VAADIN/webapp/
+ Mockito.when(mockLoader.getResource(
+ "META-INF/VAADIN/webapp/VAADIN/static/push/vaadinPush-min.js"))
+ .thenReturn(createFileURLWithDataAndLength(
+ "/push/vaadinPush-min.js", fileData));
+
+ mockStatsBundles(mockLoader);
+ mockConfigurationPolyfills();
+
+ Assert.assertTrue(fileServer.serveStaticResource(request, response));
+ Assert.assertEquals(fileData, out.getOutputString());
+ }
+
private static class CapturingServletOutputStream
extends ServletOutputStream {
ByteArrayOutputStream baos = new ByteArrayOutputStream();