Skip to content

Commit

Permalink
Added tests to verify the behavior of the scaffold generator for rela…
Browse files Browse the repository at this point in the history
…ted entities.
  • Loading branch information
VineetReynolds committed Feb 26, 2013
1 parent 8037e79 commit a7a4809
Show file tree
Hide file tree
Showing 60 changed files with 17,426 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -66,9 +66,14 @@ public Map<String, Object> inspect(JavaClass entity) {
// Extract simple type name of the relationship types
boolean isManyToOneRel = Boolean.parseBoolean(propertyAttributes.get("many-to-one"));
boolean isOneToOneRel = Boolean.parseBoolean(propertyAttributes.get("one-to-one"));
boolean isOneToManyRel = Boolean.parseBoolean(propertyAttributes.get("n-to-many"));
if (isManyToOneRel || isOneToManyRel || isOneToOneRel) {
String rightHandSideType = propertyAttributes.get("type");
boolean isNToManyRel = Boolean.parseBoolean(propertyAttributes.get("n-to-many"));
if (isManyToOneRel || isNToManyRel || isOneToOneRel) {
String rightHandSideType;
if (isOneToOneRel || isManyToOneRel) {
rightHandSideType = propertyAttributes.get("type");
} else {
rightHandSideType = propertyAttributes.get("parameterized-type");
}
String rightHandSideSimpleName = getSimpleName(rightHandSideType);
propertyAttributes.put("simpleType", rightHandSideSimpleName);
List<String> fieldsToDisplay = getFieldsToDisplay(rightHandSideType);
Expand All @@ -94,7 +99,6 @@ private List<String> getFieldsToDisplay(String manyToOneType) {
Element inspectedEntity = XmlUtils.getFirstChildElement(inspectionResult);
Element inspectedProperty = XmlUtils.getFirstChildElement(inspectedEntity);
while (inspectedProperty != null) {
System.out.println(XmlUtils.nodeToString(inspectedProperty, true));
Map<String, String> propertyAttributes = XmlUtils.getAttributesAsMap(inspectedProperty);
String hidden = propertyAttributes.get("hidden");
String required = propertyAttributes.get("required");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,166 @@ public void testScaffoldForSingleEntity() throws Exception {
// Check the generated Angular services
assertWebResourceContents(web, "/scripts/services/CustomerFactory.js", "single-entity");
}

@Test
public void testScaffoldForManyToOneRelation() throws Exception {
generateCustomerEntity();

generateStoreOrderEntity();

generateManyStoreOrderOneCustomerRelation();

generateScaffold();

WebResourceFacet web = project.getFacet(WebResourceFacet.class);

// Check if the static assets exist
assertStaticFilesAreGenerated(web);

// Check the generated Index page
assertWebResourceContents(web, "/index.html", "many-to-one");

// Check the generated Angular Module
assertWebResourceContents(web, "/scripts/app.js", "many-to-one");

// Check the generated Angular Views (templates/partials)
assertWebResourceContents(web, "/views/Customer/search.html", "many-to-one");
assertWebResourceContents(web, "/views/Customer/detail.html", "many-to-one");
assertWebResourceContents(web, "/views/StoreOrder/search.html", "many-to-one");
assertWebResourceContents(web, "/views/StoreOrder/detail.html", "many-to-one");

// Check the generated Angular Controllers
assertWebResourceContents(web, "/scripts/controllers/newCustomerController.js", "many-to-one");
assertWebResourceContents(web, "/scripts/controllers/editCustomerController.js", "many-to-one");
assertWebResourceContents(web, "/scripts/controllers/searchCustomerController.js", "many-to-one");
assertWebResourceContents(web, "/scripts/controllers/newStoreOrderController.js", "many-to-one");
assertWebResourceContents(web, "/scripts/controllers/editStoreOrderController.js", "many-to-one");
assertWebResourceContents(web, "/scripts/controllers/searchStoreOrderController.js", "many-to-one");

// Check the generated Angular services
assertWebResourceContents(web, "/scripts/services/CustomerFactory.js", "many-to-one");
assertWebResourceContents(web, "/scripts/services/StoreOrderFactory.js", "many-to-one");
}

@Test
public void testScaffoldForOneToOneRelation() throws Exception {
generateCustomerEntity();

generateAddressEntity();

generateOneCustomerOneAddressRelation();

generateScaffold();

WebResourceFacet web = project.getFacet(WebResourceFacet.class);

// Check if the static assets exist
assertStaticFilesAreGenerated(web);

// Check the generated Index page
assertWebResourceContents(web, "/index.html", "one-to-one");

// Check the generated Angular Module
assertWebResourceContents(web, "/scripts/app.js", "one-to-one");

// Check the generated Angular Views (templates/partials)
assertWebResourceContents(web, "/views/Customer/search.html", "one-to-one");
assertWebResourceContents(web, "/views/Customer/detail.html", "one-to-one");
assertWebResourceContents(web, "/views/Address/search.html", "one-to-one");
assertWebResourceContents(web, "/views/Address/detail.html", "one-to-one");

// Check the generated Angular Controllers
assertWebResourceContents(web, "/scripts/controllers/newCustomerController.js", "one-to-one");
assertWebResourceContents(web, "/scripts/controllers/editCustomerController.js", "one-to-one");
assertWebResourceContents(web, "/scripts/controllers/searchCustomerController.js", "one-to-one");
assertWebResourceContents(web, "/scripts/controllers/newAddressController.js", "one-to-one");
assertWebResourceContents(web, "/scripts/controllers/editAddressController.js", "one-to-one");
assertWebResourceContents(web, "/scripts/controllers/searchAddressController.js", "one-to-one");

// Check the generated Angular services
assertWebResourceContents(web, "/scripts/services/CustomerFactory.js", "one-to-one");
assertWebResourceContents(web, "/scripts/services/AddressFactory.js", "one-to-one");
}

@Test
public void testScaffoldForOneToManyRelation() throws Exception {
generateCustomerEntity();

generateStoreOrderEntity();

generateOneCustomerManyStoreOrderRelation();

generateScaffold();

WebResourceFacet web = project.getFacet(WebResourceFacet.class);

// Check if the static assets exist
assertStaticFilesAreGenerated(web);

// Check the generated Index page
assertWebResourceContents(web, "/index.html", "one-to-many");

// Check the generated Angular Module
assertWebResourceContents(web, "/scripts/app.js", "one-to-many");

// Check the generated Angular Views (templates/partials)
assertWebResourceContents(web, "/views/Customer/search.html", "one-to-many");
assertWebResourceContents(web, "/views/Customer/detail.html", "one-to-many");
assertWebResourceContents(web, "/views/StoreOrder/search.html", "one-to-many");
assertWebResourceContents(web, "/views/StoreOrder/detail.html", "one-to-many");

// Check the generated Angular Controllers
assertWebResourceContents(web, "/scripts/controllers/newCustomerController.js", "one-to-many");
assertWebResourceContents(web, "/scripts/controllers/editCustomerController.js", "one-to-many");
assertWebResourceContents(web, "/scripts/controllers/searchCustomerController.js", "one-to-many");
assertWebResourceContents(web, "/scripts/controllers/newStoreOrderController.js", "one-to-many");
assertWebResourceContents(web, "/scripts/controllers/editStoreOrderController.js", "one-to-many");
assertWebResourceContents(web, "/scripts/controllers/searchStoreOrderController.js", "one-to-many");

// Check the generated Angular services
assertWebResourceContents(web, "/scripts/services/CustomerFactory.js", "one-to-many");
assertWebResourceContents(web, "/scripts/services/StoreOrderFactory.js", "one-to-many");
}

@Test
public void testScaffoldForManyToManyRelation() throws Exception {
generateUserIdentityEntity();

generateGroupIdentityEntity();

generateManyGroupManyUserRelation();

generateScaffold();

WebResourceFacet web = project.getFacet(WebResourceFacet.class);

// Check if the static assets exist
assertStaticFilesAreGenerated(web);

// Check the generated Index page
assertWebResourceContents(web, "/index.html", "many-to-many");

// Check the generated Angular Module
assertWebResourceContents(web, "/scripts/app.js", "many-to-many");

// Check the generated Angular Views (templates/partials)
assertWebResourceContents(web, "/views/GroupIdentity/search.html", "many-to-many");
assertWebResourceContents(web, "/views/GroupIdentity/detail.html", "many-to-many");
assertWebResourceContents(web, "/views/UserIdentity/search.html", "many-to-many");
assertWebResourceContents(web, "/views/UserIdentity/detail.html", "many-to-many");

// Check the generated Angular Controllers
assertWebResourceContents(web, "/scripts/controllers/newGroupIdentityController.js", "many-to-many");
assertWebResourceContents(web, "/scripts/controllers/editGroupIdentityController.js", "many-to-many");
assertWebResourceContents(web, "/scripts/controllers/searchGroupIdentityController.js", "many-to-many");
assertWebResourceContents(web, "/scripts/controllers/newUserIdentityController.js", "many-to-many");
assertWebResourceContents(web, "/scripts/controllers/editUserIdentityController.js", "many-to-many");
assertWebResourceContents(web, "/scripts/controllers/searchUserIdentityController.js", "many-to-many");

// Check the generated Angular services
assertWebResourceContents(web, "/scripts/services/GroupIdentityFactory.js", "many-to-many");
assertWebResourceContents(web, "/scripts/services/UserIdentityFactory.js", "many-to-many");
}

private void generateCustomerEntity() throws Exception {
queueInputLines("");
Expand All @@ -46,4 +206,54 @@ private void generateCustomerEntity() throws Exception {
getShell().execute("constraint NotNull --onProperty firstName");
}

private void generateStoreOrderEntity() throws Exception {
queueInputLines("");
getShell().execute("entity --named StoreOrder");
getShell().execute("field string --named firstName");
getShell().execute("field temporal --type DATE --named dateOfBirth");
getShell().execute("constraint NotNull --onProperty firstName");
}

private void generateAddressEntity() throws Exception {
queueInputLines("");
getShell().execute("entity --named Address");
getShell().execute("field string --named street");
getShell().execute("field string --named city");
getShell().execute("field string --named state");
getShell().execute("field string --named country");
getShell().execute("field string --named postalcode");
}

private void generateUserIdentityEntity() throws Exception {
queueInputLines("");
getShell().execute("entity --named UserIdentity");
getShell().execute("field string --named userName");
}

private void generateGroupIdentityEntity() throws Exception {
queueInputLines("");
getShell().execute("entity --named GroupIdentity");
getShell().execute("field string --named groupName");
}

private void generateOneCustomerManyStoreOrderRelation() throws Exception {
getShell().execute("cd ../Customer.java");
getShell().execute("field oneToMany --named orders --fieldType com.test.model.StoreOrder.java");
}

private void generateOneCustomerOneAddressRelation() throws Exception {
getShell().execute("cd ../Customer.java");
getShell().execute("field oneToOne --named shippingAddress --fieldType com.test.model.Address.java");
}

private void generateManyStoreOrderOneCustomerRelation() throws Exception {
getShell().execute("cd ../StoreOrder.java");
getShell().execute("field manyToOne --named customer --fieldType com.test.model.Customer.java");
}

private void generateManyGroupManyUserRelation() throws Exception {
getShell().execute("cd ../GroupIdentity.java");
getShell().execute("field manyToMany --named users --fieldType com.test.model.UserIdentity.java");
}

}
50 changes: 50 additions & 0 deletions src/test/resources/scenario-outputs/many-to-many/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
<!doctype html>
<html lang="en" ng-app="test">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Test</title>
<link href="styles/bootstrap.css" rel="stylesheet" media="screen">
<link href="styles/main.css" rel="stylesheet" media="screen">
<link href="styles/bootstrap-responsive.css" rel="stylesheet" media="screen">
</head>
<body>
<div class="navbar navbar-inverse navbar-fixed-top">
<div class="navbar-inner">
<div class="container">
<a class="brand" href="#">Test</a>
</div>
</div>
</div>
<div class="container-fluid">
<div class="row-fluid">
<div class="span3">
<img src="images/forge-logo.png" alt="JBoss Forge"></img>
<nav class="well sidebar-nav" ng-controller="NavController">
<ul id="sidebar-entries" class="nav nav-list">
<li ng-class="{active: matchesRoute('GroupIdentitys')}"><a href="#/GroupIdentitys">GroupIdentitys</a></li>
<li ng-class="{active: matchesRoute('UserIdentitys')}"><a href="#/UserIdentitys">UserIdentitys</a></li>
</ul>
</nav>
</div>
<div class="span9">
<div id="main" class="well" ng-view>
</div>
</div>
</div>
</div>
<script src="scripts/vendor/angular.js"></script>
<script src="scripts/vendor/angular-resource.js"></script>
<script src="scripts/app.js"></script>
<script src="scripts/filters/startFromFilter.js"></script>
<script src="scripts/services/locationParser.js"></script>
<script src="scripts/services/GroupIdentityFactory.js"></script>
<script src="scripts/controllers/newGroupIdentityController.js"></script>
<script src="scripts/controllers/searchGroupIdentityController.js"></script>
<script src="scripts/controllers/editGroupIdentityController.js"></script>
<script src="scripts/services/UserIdentityFactory.js"></script>
<script src="scripts/controllers/newUserIdentityController.js"></script>
<script src="scripts/controllers/searchUserIdentityController.js"></script>
<script src="scripts/controllers/editUserIdentityController.js"></script>
</body>
</html>
20 changes: 20 additions & 0 deletions src/test/resources/scenario-outputs/many-to-many/scripts/app.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
'use strict';

angular.module('test',['ngResource'])
.config(['$routeProvider', function($routeProvider) {
$routeProvider
.when('/GroupIdentitys',{templateUrl:'views/GroupIdentity/search.html',controller:'SearchGroupIdentityController'})
.when('/GroupIdentitys/new',{templateUrl:'views/GroupIdentity/detail.html',controller:'NewGroupIdentityController'})
.when('/GroupIdentitys/edit/:GroupIdentityId',{templateUrl:'views/GroupIdentity/detail.html',controller:'EditGroupIdentityController'})
.when('/UserIdentitys',{templateUrl:'views/UserIdentity/search.html',controller:'SearchUserIdentityController'})
.when('/UserIdentitys/new',{templateUrl:'views/UserIdentity/detail.html',controller:'NewUserIdentityController'})
.when('/UserIdentitys/edit/:UserIdentityId',{templateUrl:'views/UserIdentity/detail.html',controller:'EditUserIdentityController'})
.otherwise({
redirectTo: '/'
});
}])
.controller('NavController', function NavController($scope, $location) {
$scope.matchesRoute = function(route) {
return ($location.path().indexOf(route) != -1);
};
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@


angular.module('test').controller('EditGroupIdentityController', function($scope, $routeParams, $location, GroupIdentityResource , UserIdentityResource) {
var self = this;
$scope.disabled = false;

$scope.get = function() {
var successCallback = function(data){
self.original = data;
$scope.groupIdentity = new GroupIdentityResource(self.original);
UserIdentityResource.queryAll(function(data) {
$scope.usersList = data;
angular.forEach($scope.usersList, function(datum){
angular.forEach($scope.groupIdentity.users, function(nestedDatum,index){
if(angular.equals(datum,nestedDatum)) {
$scope.groupIdentity.users[index] = datum;
self.original.users[index] = datum;
}
});
});
});
};
var errorCallback = function() {
$location.path("/GroupIdentitys");
};
GroupIdentityResource.get({GroupIdentityId:$routeParams.GroupIdentityId}, successCallback, errorCallback);
};

$scope.isClean = function() {
return angular.equals(self.original, $scope.groupIdentity);
};

$scope.save = function() {
var successCallback = function(){
$scope.get();
$scope.displayError = false;
};
var errorCallback = function() {
$scope.displayError=true;
};
$scope.groupIdentity.$update(successCallback, errorCallback);
};

$scope.cancel = function() {
$location.path("/GroupIdentitys");
};

$scope.remove = function() {
var successCallback = function() {
$location.path("/GroupIdentitys");
$scope.displayError = false;
};
var errorCallback = function() {
$scope.displayError=true;
};
$scope.groupIdentity.$remove(successCallback, errorCallback);
};

$scope.removeusers = function(index) {
$scope.groupIdentity.users.splice(index, 1);
};

$scope.addusers = function() {
$scope.groupIdentity.users = $scope.groupIdentity.users || [];
$scope.groupIdentity.users.push(new UserIdentityResource());
};

$scope.get();
});
Loading

0 comments on commit a7a4809

Please sign in to comment.