# Print a test page using create-job + send-document, specifying the
# document format.
{
	# The name of the test...
	NAME "Print test page using create-job"

	# The resource to use for the POST
	# RESOURCE /admin

	# The operation to use
	OPERATION create-job

	# Attributes, starting in the operation group...
	GROUP operation
	ATTR charset attributes-charset utf-8
	ATTR language attributes-natural-language en
	ATTR uri printer-uri $uri
	ATTR name requesting-user-name $user

	GROUP job
	ATTR integer copies 1

	# What statuses are OK?
	STATUS successful-ok
	STATUS successful-ok-ignored-or-substituted-attributes

	# What attributes do we expect?
	EXPECT job-id
	EXPECT job-uri
}
{
	# The name of the test...
	NAME "... and send-document"

	# The resource to use for the POST
	# RESOURCE /admin

	# The operation to use
	OPERATION send-document

	# Attributes, starting in the operation group...
	GROUP operation
	ATTR charset attributes-charset utf-8
	ATTR language attributes-natural-language en
	ATTR uri printer-uri $uri
	ATTR integer job-id $job-id
	ATTR name requesting-user-name $user
	ATTR mimetype document-format application/postscript
	ATTR boolean last-document true

	FILE ../data/testprint.ps

	# What statuses are OK?
	STATUS successful-ok
	STATUS successful-ok-ignored-or-substituted-attributes
}
