restassured_cli 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +4 -0
  3. data/LICENSE.txt +21 -0
  4. data/README.md +139 -0
  5. data/Rakefile +3 -0
  6. data/bin/console +14 -0
  7. data/bin/restassured_cli +46 -0
  8. data/bin/setup +7 -0
  9. data/lib/restassured_cli.rb +77 -0
  10. data/lib/restassured_cli/createcontroller.rb +81 -0
  11. data/lib/restassured_cli/filenames.rb +69 -0
  12. data/lib/restassured_cli/source/maven/pom.xml +14 -0
  13. data/lib/restassured_cli/source/maven/testing/README.md +26 -0
  14. data/lib/restassured_cli/source/maven/testing/pom.xml +27 -0
  15. data/lib/restassured_cli/source/maven/testing/sampleservice-perf-tests/LoginTest.java +14 -0
  16. data/lib/restassured_cli/source/maven/testing/sampleservice-perf-tests/pom.xml +14 -0
  17. data/lib/restassured_cli/source/maven/testing/sampleservice-perf-tests/testng-perf-notests.xml +9 -0
  18. data/lib/restassured_cli/source/maven/testing/sampleservice-perf-tests/testng-perf.xml +9 -0
  19. data/lib/restassured_cli/source/maven/testing/sampleservice-production-tests/logback.xml +15 -0
  20. data/lib/restassured_cli/source/maven/testing/sampleservice-production-tests/pom.xml +21 -0
  21. data/lib/restassured_cli/source/maven/testing/sampleservice-production-tests/testng-production.xml +9 -0
  22. data/lib/restassured_cli/source/maven/testing/sampleservice-service-tests/default/SampleTest.java +30 -0
  23. data/lib/restassured_cli/source/maven/testing/sampleservice-service-tests/default/testng-ci.xml +13 -0
  24. data/lib/restassured_cli/source/maven/testing/sampleservice-service-tests/default/testng-e2e.xml +13 -0
  25. data/lib/restassured_cli/source/maven/testing/sampleservice-service-tests/default/testng-qa.xml +9 -0
  26. data/lib/restassured_cli/source/maven/testing/sampleservice-service-tests/full/SampleComponentTest.java +312 -0
  27. data/lib/restassured_cli/source/maven/testing/sampleservice-service-tests/full/SampleServiceIntegrationTest.java +129 -0
  28. data/lib/restassured_cli/source/maven/testing/sampleservice-service-tests/full/testng-ci.xml +13 -0
  29. data/lib/restassured_cli/source/maven/testing/sampleservice-service-tests/full/testng-e2e.xml +9 -0
  30. data/lib/restassured_cli/source/maven/testing/sampleservice-service-tests/full/testng-qa.xml +9 -0
  31. data/lib/restassured_cli/source/maven/testing/sampleservice-service-tests/logback.xml +15 -0
  32. data/lib/restassured_cli/source/maven/testing/sampleservice-service-tests/pom.xml +22 -0
  33. data/lib/restassured_cli/source/maven/testing/sampleservice-service-tests/resources/ci/sample.properties +0 -0
  34. data/lib/restassured_cli/source/maven/testing/sampleservice-service-tests/resources/default/sample.properties +2 -0
  35. data/lib/restassured_cli/source/maven/testing/sampleservice-service-tests/resources/e2e/sample.properties +1 -0
  36. data/lib/restassured_cli/source/maven/testing/sampleservice-service-tests/resources/qa/sample.properties +0 -0
  37. data/lib/restassured_cli/source/maven/testing/sampleservice-test-library/default/BaseConstant.java +48 -0
  38. data/lib/restassured_cli/source/maven/testing/sampleservice-test-library/default/InternalConfigManager.java +52 -0
  39. data/lib/restassured_cli/source/maven/testing/sampleservice-test-library/default/ServiceTestBase.java +103 -0
  40. data/lib/restassured_cli/source/maven/testing/sampleservice-test-library/default/sample/base/Constant.java +12 -0
  41. data/lib/restassured_cli/source/maven/testing/sampleservice-test-library/default/sample/base/SampleTestBase.java +15 -0
  42. data/lib/restassured_cli/source/maven/testing/sampleservice-test-library/full/Customer.java +83 -0
  43. data/lib/restassured_cli/source/maven/testing/sampleservice-test-library/full/Phone.java +31 -0
  44. data/lib/restassured_cli/source/maven/testing/sampleservice-test-library/full/SampleServiceHelper.java +8 -0
  45. data/lib/restassured_cli/source/maven/testing/sampleservice-test-library/full/sample/base/Constant.java +12 -0
  46. data/lib/restassured_cli/source/maven/testing/sampleservice-test-library/full/sample/base/SampleTestBase.java +63 -0
  47. data/lib/restassured_cli/source/maven/testing/sampleservice-test-library/pom.xml +14 -0
  48. data/lib/restassured_cli/source/maven/testing/sampleservice-test-parent-pom/pom.xml +225 -0
  49. data/lib/restassured_cli/source/maven/testing/sampleservice-test-runner/pom.xml +84 -0
  50. data/lib/restassured_cli/userinterface.rb +55 -0
  51. data/lib/restassured_cli/version.rb +3 -0
  52. data/spec/restassured_cli_spec.rb +84 -0
  53. data/spec/spec_helper.rb +14 -0
  54. metadata +141 -0
@@ -0,0 +1,83 @@
1
+ package GROUPID.tests.library.schema;
2
+
3
+ import com.fasterxml.jackson.core.JsonProcessingException;
4
+ import com.fasterxml.jackson.databind.ObjectMapper;
5
+ import com.fasterxml.jackson.databind.ObjectWriter;
6
+ import org.slf4j.Logger;
7
+ import org.slf4j.LoggerFactory;
8
+
9
+ import java.util.ArrayList;
10
+
11
+ /**
12
+ * Please <b>DO NOT</b> develop any schema for testing. This is created for demo only.
13
+ * This should be the same schema from your source code that should be made available.
14
+ */
15
+ public class Customer {
16
+ private final Logger logger = LoggerFactory.getLogger(Customer.class);
17
+ private String firstname;
18
+ private String lastname;
19
+ private ArrayList<Phone> phone;
20
+ private String city;
21
+ private String state;
22
+ private String zip;
23
+
24
+ public ArrayList<Phone> getPhone() {
25
+ return phone;
26
+ }
27
+
28
+ public void setPhone(ArrayList<Phone> phone) {
29
+ this.phone = phone;
30
+ }
31
+
32
+ public String getLastname() {
33
+ return lastname;
34
+ }
35
+
36
+ public void setLastname(String lastname) {
37
+ this.lastname = lastname;
38
+ }
39
+
40
+ public String getFirstname() {
41
+ return firstname;
42
+ }
43
+
44
+ public void setFirstname(String firstname) {
45
+ this.firstname = firstname;
46
+ }
47
+
48
+ public String getCity() {
49
+ return city;
50
+ }
51
+
52
+ public void setCity(String city) {
53
+ this.city = city;
54
+ }
55
+
56
+ public String getState() {
57
+ return state;
58
+ }
59
+
60
+ public void setState(String state) {
61
+ this.state = state;
62
+ }
63
+
64
+ public String getZip() {
65
+ return zip;
66
+ }
67
+
68
+ public void setZip(String zip) {
69
+ this.zip = zip;
70
+ }
71
+
72
+ @Override
73
+ public String toString() {
74
+ ObjectWriter prettyPrinter = new ObjectMapper().writer().withDefaultPrettyPrinter();
75
+ try {
76
+ String json = prettyPrinter.writeValueAsString(this);
77
+ return json;
78
+ } catch (JsonProcessingException e) {
79
+ e.printStackTrace();
80
+ return "";
81
+ }
82
+ }
83
+ }
@@ -0,0 +1,31 @@
1
+ package GROUPID.tests.library.schema;
2
+
3
+ import org.slf4j.Logger;
4
+ import org.slf4j.LoggerFactory;
5
+
6
+ /**
7
+ * Please <b>DO NOT</b> develop any schema for testing. This is created for demo only.
8
+ * This should be the same schema from your source code that should be made available.
9
+ */
10
+ public class Phone {
11
+ private final Logger logger = LoggerFactory.getLogger(Phone.class);
12
+ private String type;
13
+ private String number;
14
+
15
+ public String getNumber() {
16
+ return number;
17
+ }
18
+
19
+ public void setNumber(String number) {
20
+ this.number = number;
21
+ }
22
+
23
+ public String getType() {
24
+ return type;
25
+ }
26
+
27
+ public void setType(String type) {
28
+ this.type = type;
29
+ }
30
+
31
+ }
@@ -0,0 +1,8 @@
1
+ package GROUPID.tests.library.sample;
2
+
3
+ /**
4
+ * This should contain any helper or utility methods.
5
+ */
6
+ public class SampleServiceHelper {
7
+
8
+ }
@@ -0,0 +1,12 @@
1
+ package GROUPID.tests.library.sample.base;
2
+
3
+ /**
4
+ * Consolidates all the constants into 1 file for code reuse.
5
+ */
6
+ public class Constant {
7
+
8
+ /**
9
+ * Properties
10
+ */
11
+ public static final String PROPERTIES_FILE = "/sample.properties";
12
+ }
@@ -0,0 +1,63 @@
1
+ package GROUPID.tests.library.sample.base;
2
+
3
+ import GROUPID.tests.library.base.ServiceTestBase;
4
+ import GROUPID.tests.library.base.BaseConstant;
5
+ import com.github.tomakehurst.wiremock.WireMockServer;
6
+ import com.jayway.restassured.filter.log.LogDetail;
7
+ import com.jayway.restassured.filter.log.ResponseLoggingFilter;
8
+ import org.testng.annotations.AfterSuite;
9
+ import org.testng.annotations.BeforeSuite;
10
+
11
+ import static com.github.tomakehurst.wiremock.core.WireMockConfiguration.wireMockConfig;
12
+
13
+ /**
14
+ * Base class for common business logic that applies to all tests.
15
+ * Please put any utility/helper functions in SampleServiceHelper in test-library module.
16
+ * @author eing
17
+ */
18
+ public class SampleTestBase extends ServiceTestBase {
19
+
20
+ /**
21
+ * Creates only one instance of WireMock server for all tests that extends SampleTestBase.
22
+ */
23
+ protected static WireMockServer wireMockServer = null;
24
+
25
+ /**
26
+ * Creates default request and response specification for reuse.
27
+ */
28
+ public SampleTestBase() {
29
+ super(Constant.PROPERTIES_FILE);
30
+ requestSpecBuilder.log(LogDetail.ALL).addFilter(new ResponseLoggingFilter(LogDetail.ALL));
31
+ requestSpec = requestSpecBuilder.build();
32
+ responseSpecBuilder.expectStatusCode(200);
33
+ responseSpec = responseSpecBuilder.build();
34
+ }
35
+
36
+ /**
37
+ * Starts up WireMock before any tests gets run.
38
+ */
39
+ @BeforeSuite
40
+ public void beforeClass() {
41
+ if (wireMockServer == null) {
42
+ logger.debug("========== Starting WireMock ==========");
43
+ String wiremockPort = internalProperties.getProperty(BaseConstant.HTTP_PROPERTY_PORT);
44
+ if (wiremockPort != null) {
45
+ wireMockServer = new WireMockServer(wireMockConfig().port(
46
+ Integer.parseInt(wiremockPort)));
47
+ wireMockServer.start();
48
+ }
49
+ }
50
+ }
51
+
52
+ /**
53
+ * Stops WireMock when all tests are executed.
54
+ */
55
+ @AfterSuite
56
+ public void afterClass() {
57
+ logger.debug("========== Stopping WireMock ==========");
58
+ if (wireMockServer != null) {
59
+ wireMockServer.stop();
60
+ wireMockServer = null;
61
+ }
62
+ }
63
+ }
@@ -0,0 +1,14 @@
1
+ <project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
2
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
3
+ <parent>
4
+ <groupId>GROUPID.tests</groupId>
5
+ <artifactId>SERVICENAME-test-parent-pom</artifactId>
6
+ <version>PROJECTVERSION</version>
7
+ <relativePath>../SERVICENAME-test-parent-pom</relativePath>
8
+ </parent>
9
+
10
+ <modelVersion>4.0.0</modelVersion>
11
+ <artifactId>SERVICENAME-test-library</artifactId>
12
+ <name>SERVICENAME-test-library</name>
13
+
14
+ </project>
@@ -0,0 +1,225 @@
1
+ <project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
2
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
3
+ <!--
4
+ TODO: Add your Testing Parent Pom here that can contain all the profiles, plugins and dependencies listed below.
5
+ -->
6
+ <!--
7
+ <parent>
8
+ <groupId></groupId>
9
+ <artifactId></artifactId>
10
+ <version></version>
11
+ <relativePath/>
12
+ </parent>
13
+ -->
14
+
15
+ <modelVersion>4.0.0</modelVersion>
16
+ <groupId>GROUPID.tests</groupId>
17
+ <artifactId>SERVICENAME-test-parent-pom</artifactId>
18
+ <version>PROJECTVERSION</version>
19
+ <name>SERVICENAME-test-parent-pom</name>
20
+ <packaging>pom</packaging>
21
+
22
+ <properties>
23
+ <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
24
+ <failsafeVersion>2.17</failsafeVersion>
25
+ <mavenPluginsVersion>2.4</mavenPluginsVersion>
26
+ <restAssuredVersion>2.4.1</restAssuredVersion>
27
+ <jdkSourceVersion>JDKVERSION</jdkSourceVersion>
28
+ <jdkTargetVersion>JDKVERSION</jdkTargetVersion>
29
+ </properties>
30
+
31
+ <dependencies>
32
+ <dependency>
33
+ <groupId>com.jayway.restassured</groupId>
34
+ <artifactId>rest-assured</artifactId>
35
+ <version>${restAssuredVersion}</version>
36
+ </dependency>
37
+ <dependency>
38
+ <groupId>org.testng</groupId>
39
+ <artifactId>testng</artifactId>
40
+ <version>6.8.8</version>
41
+ </dependency>
42
+ <dependency>
43
+ <groupId>org.slf4j</groupId>
44
+ <artifactId>slf4j-api</artifactId>
45
+ <version>1.7.5</version>
46
+ </dependency>
47
+ <dependency>
48
+ <groupId>ch.qos.logback</groupId>
49
+ <artifactId>logback-classic</artifactId>
50
+ <version>1.1.2</version>
51
+ </dependency>
52
+ <dependency>
53
+ <groupId>com.jayway.awaitility</groupId>
54
+ <artifactId>awaitility</artifactId>
55
+ <version>1.6.3</version>
56
+ </dependency>
57
+ <dependency>
58
+ <groupId>com.github.tomakehurst</groupId>
59
+ <artifactId>wiremock</artifactId>
60
+ <version>1.57</version>
61
+ </dependency>
62
+ <dependency>
63
+ <groupId>com.fasterxml.jackson.core</groupId>
64
+ <artifactId>jackson-databind</artifactId>
65
+ <version>2.6.0</version>
66
+ </dependency>
67
+ </dependencies>
68
+
69
+ <build>
70
+ <pluginManagement>
71
+ <plugins>
72
+ <plugin>
73
+ <artifactId>maven-compiler-plugin</artifactId>
74
+ <configuration>
75
+ <source>${jdkSourceVersion}</source>
76
+ <target>${jdkTargetVersion}</target>
77
+ </configuration>
78
+ </plugin>
79
+ <plugin>
80
+ <groupId>org.apache.maven.plugins</groupId>
81
+ <artifactId>maven-failsafe-plugin</artifactId>
82
+ <version>${failsafeVersion}</version>
83
+ <dependencies>
84
+ <dependency>
85
+ <groupId>org.apache.maven.surefire</groupId>
86
+ <artifactId>surefire-testng</artifactId>
87
+ <version>${failsafeVersion}</version>
88
+ </dependency>
89
+ </dependencies>
90
+ <configuration>
91
+ <printSummary>true</printSummary>
92
+ </configuration>
93
+ <executions>
94
+ <execution>
95
+ <id>integration-test</id>
96
+ <phase>integration-test</phase>
97
+ <goals>
98
+ <goal>integration-test</goal>
99
+ </goals>
100
+ <configuration>
101
+ <useSystemClassLoader>true</useSystemClassLoader>
102
+ <forkMode>once</forkMode>
103
+ <reportFormat>xml</reportFormat>
104
+ </configuration>
105
+ </execution>
106
+ </executions>
107
+ </plugin>
108
+ </plugins>
109
+ </pluginManagement>
110
+ </build>
111
+
112
+ <profiles>
113
+ <profile>
114
+ <id>ci</id>
115
+ <properties>
116
+ <targetenv>ci</targetenv>
117
+ </properties>
118
+ <build>
119
+ <plugins>
120
+ <plugin>
121
+ <groupId>org.apache.maven.plugins</groupId>
122
+ <artifactId>maven-failsafe-plugin</artifactId>
123
+ <configuration>
124
+ <systemProperties>
125
+ <targetenv>${targetenv}</targetenv>
126
+ </systemProperties>
127
+ <suiteXmlFiles>
128
+ <suiteXmlFile>${project.build.outputDirectory}/testng-ci.xml</suiteXmlFile>
129
+ </suiteXmlFiles>
130
+ </configuration>
131
+ </plugin>
132
+ </plugins>
133
+ </build>
134
+ </profile>
135
+ <profile>
136
+ <id>qa</id>
137
+ <properties>
138
+ <targetenv>qa</targetenv>
139
+ </properties>
140
+ <build>
141
+ <plugins>
142
+ <plugin>
143
+ <groupId>org.apache.maven.plugins</groupId>
144
+ <artifactId>maven-failsafe-plugin</artifactId>
145
+ <configuration>
146
+ <systemProperties>
147
+ <targetenv>${targetenv}</targetenv>
148
+ </systemProperties>
149
+ <suiteXmlFiles>
150
+ <suiteXmlFile>${project.build.outputDirectory}/testng-qa.xml</suiteXmlFile>
151
+ </suiteXmlFiles>
152
+ </configuration>
153
+ </plugin>
154
+ </plugins>
155
+ </build>
156
+ </profile>
157
+ <profile>
158
+ <id>perf</id>
159
+ <properties>
160
+ <targetenv>perf</targetenv>
161
+ </properties>
162
+ <build>
163
+ <plugins>
164
+ <plugin>
165
+ <groupId>org.apache.maven.plugins</groupId>
166
+ <artifactId>maven-failsafe-plugin</artifactId>
167
+ <configuration>
168
+ <systemProperties>
169
+ <targetenv>${targetenv}</targetenv>
170
+ </systemProperties>
171
+ <suiteXmlFiles>
172
+ <suiteXmlFile>${project.build.outputDirectory}/testng-perf.xml</suiteXmlFile>
173
+ </suiteXmlFiles>
174
+ </configuration>
175
+ </plugin>
176
+ </plugins>
177
+ </build>
178
+ </profile>
179
+ <profile>
180
+ <id>e2e</id>
181
+ <properties>
182
+ <targetenv>e2e</targetenv>
183
+ </properties>
184
+ <build>
185
+ <plugins>
186
+ <plugin>
187
+ <groupId>org.apache.maven.plugins</groupId>
188
+ <artifactId>maven-failsafe-plugin</artifactId>
189
+ <configuration>
190
+ <systemProperties>
191
+ <targetenv>${targetenv}</targetenv>
192
+ </systemProperties>
193
+ <suiteXmlFiles>
194
+ <suiteXmlFile>${project.build.outputDirectory}/testng-e2e.xml</suiteXmlFile>
195
+ </suiteXmlFiles>
196
+ </configuration>
197
+ </plugin>
198
+ </plugins>
199
+ </build>
200
+ </profile>
201
+ <profile>
202
+ <id>production</id>
203
+ <properties>
204
+ <targetenv>production</targetenv>
205
+ </properties>
206
+ <build>
207
+ <plugins>
208
+ <plugin>
209
+ <groupId>org.apache.maven.plugins</groupId>
210
+ <artifactId>maven-failsafe-plugin</artifactId>
211
+ <configuration>
212
+ <systemProperties>
213
+ <targetenv>${targetenv}</targetenv>
214
+ </systemProperties>
215
+ <suiteXmlFiles>
216
+ <suiteXmlFile>${project.build.outputDirectory}/testng-production.xml</suiteXmlFile>
217
+ </suiteXmlFiles>
218
+ </configuration>
219
+ </plugin>
220
+ </plugins>
221
+ </build>
222
+ </profile>
223
+ </profiles>
224
+
225
+ </project>
@@ -0,0 +1,84 @@
1
+ <project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
2
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
3
+
4
+ <parent>
5
+ <groupId>GROUPID.tests</groupId>
6
+ <artifactId>SERVICENAME-test-parent-pom</artifactId>
7
+ <version>PROJECTVERSION</version>
8
+ <relativePath>../SERVICENAME-test-parent-pom</relativePath>
9
+ </parent>
10
+
11
+ <modelVersion>4.0.0</modelVersion>
12
+ <groupId>GROUPID.tests</groupId>
13
+ <artifactId>SERVICENAME-test-runner</artifactId>
14
+ <name>SERVICENAME-test-runner</name>
15
+ <version>PROJECTVERSION</version>
16
+ <packaging>jar</packaging>
17
+
18
+ <properties>
19
+ <testArtifactVersion>${project.version}</testArtifactVersion>
20
+ </properties>
21
+
22
+ <dependencies>
23
+ <dependency>
24
+ <groupId>GROUPID.tests</groupId>
25
+ <artifactId>SERVICENAME-service-tests</artifactId>
26
+ <version>${testArtifactVersion}</version>
27
+ </dependency>
28
+ <dependency>
29
+ <groupId>GROUPID.tests</groupId>
30
+ <artifactId>SERVICENAME-perf-tests</artifactId>
31
+ <version>${testArtifactVersion}</version>
32
+ </dependency>
33
+ <dependency>
34
+ <groupId>GROUPID.tests</groupId>
35
+ <artifactId>SERVICENAME-production-tests</artifactId>
36
+ <version>${testArtifactVersion}</version>
37
+ </dependency>
38
+ </dependencies>
39
+
40
+ <build>
41
+ <plugins>
42
+ <plugin>
43
+ <groupId>org.apache.maven.plugins</groupId>
44
+ <artifactId>maven-dependency-plugin</artifactId>
45
+ <version>2.10</version>
46
+ <executions>
47
+ <execution>
48
+ <id>unpack</id>
49
+ <phase>package</phase>
50
+ <goals>
51
+ <goal>unpack</goal>
52
+ </goals>
53
+ <configuration>
54
+ <artifactItems>
55
+ <artifactItem>
56
+ <groupId>GROUPID.tests</groupId>
57
+ <artifactId>SERVICENAME-service-tests</artifactId>
58
+ <type>jar</type>
59
+ <overWrite>true</overWrite>
60
+ </artifactItem>
61
+ <artifactItem>
62
+ <groupId>GROUPID.tests</groupId>
63
+ <artifactId>SERVICENAME-perf-tests</artifactId>
64
+ <type>jar</type>
65
+ <overWrite>true</overWrite>
66
+ </artifactItem>
67
+ <artifactItem>
68
+ <groupId>GROUPID.tests</groupId>
69
+ <artifactId>SERVICENAME-production-tests</artifactId>
70
+ <type>jar</type>
71
+ <overWrite>true</overWrite>
72
+ </artifactItem>
73
+ </artifactItems>
74
+ <includes>**/testng*.xml</includes>
75
+ <outputDirectory>${project.build.outputDirectory}</outputDirectory>
76
+ <overWriteReleases>true</overWriteReleases>
77
+ <overWriteSnapshots>true</overWriteSnapshots>
78
+ </configuration>
79
+ </execution>
80
+ </executions>
81
+ </plugin>
82
+ </plugins>
83
+ </build>
84
+ </project>