import ns org.eclipse.osbp.authentication.account.^entities.UserAccount
import ns org.eclipse.osbp.blob.^entities.BlobMapping

package ${{MODEL_PROJECT_PACKAGE_NAME}} {
	mock  ${{BUSINESS_BUNDLE_CLASS_NAME}}Users {
    priority 4

		resources {

			resource resourceUserAccounts {
				attributes (user_name, password, position, enabled, localeTag)
				items {
					ADMIN   ( "Admin",   "Admin",   "Administrator", "false", "en-US" )
				}
			}
		}

		entities {

			mocking mockUserAccount entity UserAccount resource resourceUserAccounts {
				var userName  as user_name
				var password  as password
				var position  as position
				var enabled   as enabled
				var localeTag as localeTag
			}
		}
	}
	
	mock ${{BUSINESS_BUNDLE_CLASS_NAME}}Entities {
		objects {
			
		}
		
		entities {
			
		}
	}
	
	mock ${{BUSINESS_BUNDLE_CLASS_NAME}}Blobs {
    priority 2
	
	    resources {

			resource resourceBlobMapping {
				attributes (id, fileName, mimeTypeId, uniqueName)
				items {
				}
			}
		}

		entities {

			mocking mockedBlobMapping entity BlobMapping resource resourceBlobMapping {
				var id          as id
				var uniqueName  as uniqueName
				var fileName    as fileName
				var mimeTypeId  as mimeTypeId
				createBlobMapping
			}
		}
	}
}
