I want to share some thoughts about writing Acceptance Tests for a complex system.
General idea of Acceptance Testing is to write Test Cases to User Story which creates value to the customer. My argument is, that it might be impossible, in some cases to create User Stories for one team for one sprint, which creates really something usable. Reason for this is middle ware, complex technology, low level programing language. etc.
So basic idea for this, is to create Upper level User Story and create Acceptance Test Cases for that and those test cases are purely black box. After that you can break user story to as many smaller pieces as it's necessary and those smaller pieces can be really something which is not providing anything really working, but compilation of them creates value. Those pieces are still acceptance tested, but you can use more like white box and gray box approaching to them. Test Cases for Upper level User Stories are assuring that everything is implemented and nothing is missing because of splitting.