#
#  Licensed to the Apache Software Foundation (ASF) under one
#  or more contributor license agreements.  See the NOTICE file
#  distributed with this work for additional information
#  regarding copyright ownership.  The ASF licenses this file
#  to you under the Apache License, Version 2.0 (the
#  "License"); you may not use this file except in compliance
#  with the License.  You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
#  Unless required by applicable law or agreed to in writing,
#  software distributed under the License is distributed on an
#  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
#  KIND, either express or implied.  See the License for the
#  specific language governing permissions and limitations
#  under the License.
#
[feature name=repoinit-tests]

[artifacts startLevel=2]
  org.apache.sling/org.apache.sling.jcr.repoinit/1.1.5-SNAPSHOT
  org.apache.sling/org.apache.sling.repoinit.parser/1.1.1-SNAPSHOT
  org.apache.sling/org.apache.sling.provisioning.model/1.8.2

[artifacts]
  org.apache.sling/org.apache.sling.junit.core/1.0.18
  org.apache.sling/org.apache.sling.testing.tools/1.0.10
    
[settings]
  org.apache.sling.commons.log.julenabled=true

[configurations]
  org.apache.sling.jcr.repoinit.impl.RepositoryInitializer
    references=["model:context:/resources/provisioning/model.txt","model@repoinitTwo:context:/resources/provisioning/model.txt"]

[:repoinit]
# Test the RepositoryInitializer which reads such sections  
create path /repoinit/fromProvisioningModel

create service user userFromProvisioningModel

set ACL for userFromProvisioningModel
  allow jcr:read on /repoinit/fromProvisioningModel
  deny jcr:write on /repoinit/fromProvisioningModel
end

register namespace (slingtest) http://sling.apache.org/ns/test/repoinit-it/v1.0

register nodetypes
<<===
<< <slingtest='http://sling.apache.org/ns/test/repoinit-it/v1.0'>
<< [slingtest:unstructured] > nt:unstructured
===>>

# second section to test multiple configured URLs
[:repoinitTwo]
create service user secondUserFromProvisioningModel
