'return a dict of modules: the conditional with a single source and a single child.
Keys are \'cond_module\', \'source_module\', and \'child_module\'.
if the source_is_error_module flag is set, create a real ErrorModule for the source.'

@staticmethod
def create(system, source_is_error_module=False, source_visible_to_staff_only=False):

    descriptor_system = get_test_descriptor_system()
    source_location = Location('edX', 'conditional_test', 'test_run', 'problem', 'SampleProblem', None)
    if source_is_error_module:
        source_descriptor = NonStaffErrorDescriptor.from_xml('some    random    xml    data', system, id_generator=CourseLocationManager(source_location.course_key), error_msg='random    error    message')
    else:
        source_descriptor = Mock(name='source_descriptor')
        source_descriptor.location = source_location
    source_descriptor.visible_to_staff_only = source_visible_to_staff_only
    source_descriptor.runtime = descriptor_system
    source_descriptor.render = (lambda view, context=None: descriptor_system.render(source_descriptor, view, context))
    child_descriptor = Mock(name='child_descriptor')
    child_descriptor.visible_to_staff_only = False
    child_descriptor._xmodule.student_view.return_value.content = u'<p>This    is    a    secret</p>'
    child_descriptor.student_view = child_descriptor._xmodule.student_view
    child_descriptor.displayable_items.return_value = [child_descriptor]
    child_descriptor.runtime = descriptor_system
    child_descriptor.xmodule_runtime = get_test_system()
    child_descriptor.render = (lambda view, context=None: descriptor_system.render(child_descriptor, view, context))
    child_descriptor.location = source_location.replace(category='html', name='child')
    def visible_to_nonstaff_users(desc):
        '\n                                                Returns    if    the    object    is    visible    to    nonstaff    users.\n                                                '
        return (not desc.visible_to_staff_only)
    def load_item(usage_id, for_parent=None):
        'Test-only    implementation    of    load_item    that    simply    returns    static    xblocks.'
        return {child_descriptor.location: child_descriptor, source_location: source_descriptor}.get(usage_id)
    descriptor_system.load_item = load_item
    system.descriptor_runtime = descriptor_system
    cond_location = Location('edX', 'conditional_test', 'test_run', 'conditional', 'SampleConditional', None)
    field_data = DictFieldData({'data': '<conditional/>', 'conditional_attr': 'attempted', 'conditional_value': 'true', 'xml_attributes': {'attempted': 'true'}, 'children': [child_descriptor.location]})
    cond_descriptor = ConditionalDescriptor(descriptor_system, field_data, ScopeIds(None, None, cond_location, cond_location))
    cond_descriptor.xmodule_runtime = system
    system.get_module = (lambda desc: (desc if visible_to_nonstaff_users(desc) else None))
    cond_descriptor.get_required_module_descriptors = Mock(return_value=[source_descriptor])
    cond_descriptor.required_modules = [system.get_module(descriptor) for descriptor in cond_descriptor.get_required_module_descriptors()]
    return {'cond_module': cond_descriptor, 'source_module': source_descriptor, 'child_module': child_descriptor}
