Media Picker v3 (#9461)
* set input file accept
* Use PreValue file extensions for limiting the files to be chosen in file input
* Current state for Warren to review
* This should fix up what you need Niels
* update csproj
* use empty string if fileExtensions is undefined
* public interface
* initial work
* local crops
* translations
* translation correction
* fix misspeling
* some progress
* filter media picker
* align media card grid items correctly
* responsive media cropper
* always be able to scale 3 times smallest scale
* making image cropper property editor responsive
* scroll to scale
* adjust slider look
* rearrange parts of mediaentryeditor
* test helper
* styling
* move controls inside umb-image-crop
* seperate umg-cropper-gravity styling
* corrected layout
* more ui refinement
* keep the idea of mandatory out for now.
* remove double ;
* removed testing code
* JSON Property Value Convertor now has an array of property editors to exclude
* Property Value Convertor for Media Picker 3 aka Media Picker with Local Crops
* Experimenting on best approach to retrieve local crop in razor view when iterating over picked media items
* Update ValueConvertor to use ImageCropperValue as part of the model for views as alot of existing CropUrls can then use it
* Update extension methods to take an ImageCropperValue model (localCropData)
* Forgot to update CSProj for new ValueConvertor
* New GetCropUrl @Url.GetCropUrl(crop.Alias, media.LocalCrops) as oppposed to @Url.GetCropUrl(media.LocalCrops, cropAlias:crop.Alias, useCropDimensions: true)
* Remove dupe item in CSProj
* Use a contains as an opposed to Array.IndexOf
* various corrections, SingleMode based on max 1, remove double checkerBackground, enforce validation for Crops, changed error indication
* mediapicker v3
* correct version
* fixing file ext label text color
* clipboard features for MediaPicker v3
* highlight not allowed types
* highlight trashed as an error
* Media Types Video, Sound, Document and Vector Image
* Rename to Audio and VectorGraphics
* Add (SVG) in the name for Vector Graphics
* adding CSV to Documents
* remove this commented code.
* remove this commented code
* number range should not go below 0, at-least as default until we make that configurable.
* use min not ng-min
* description for local crops
* Error/Limits highlighting reactive
* visual adjustments
* Enabling opening filtered folders + corrected select hover states
* Varous fixes to resolve issues with unit tests.
* Refactor MediaType Documents to only contain Article file type
* mark as build-in
* predefined MediaPicker3 DataTypes, renaming v2 to "old"
* set scale bar current value after min and max has been set
* added missing }
* update when focal point is dragged
* adjusted styling for Image Cropper property editor
* correcting comment
* remove todo - message for trashed media items works
* Changed parameter ordering
* Introduced new extension method on MediaWithCrops to get croppings urls in with full path
* Reintroducing Single Item Mode
* use Multiple instead of SingleMode
* renaming and adding multiple to preconfigured datatypes
* Change existing media picker to use the Clipboard type MEDIA, enabling shared functionality.
* clean up unused clipboard parts
* adjusted to new amount
* correcting test
* Fix unit test
* Move MediaWithCrops to separate file and move to Core.Models
* parseContentForPaste
* clean up
* ensure crops is an array.
* actively enable focal points, so we dont set focal points that aren't used.
* only accept files that matches file extensions from Umbraco Settings
* Cleanup
* Add references from MediaPicker3 to media
* corrections from various feedback
* remove comment
* correct wording
* use windowResizeListener
Co-authored-by: Warren Buckley <warren@umbraco.com>
Co-authored-by: Niels Lyngsø <nsl@umbraco.com>
Co-authored-by: Mads Rasmussen <madsr@hey.com>
Co-authored-by: Andy Butland <abutland73@gmail.com>
Co-authored-by: Bjarke Berg <mail@bergmania.dk>
Co-authored-by: Sebastiaan Janssen <sebastiaan@umbraco.com>
Co-authored-by: Elitsa Marinovska <elm@umbraco.dk>
2021-04-22 10:28:53 +02:00
|
|
|
|
using Examine;
|
2018-06-29 19:52:40 +02:00
|
|
|
|
using NUnit.Framework;
|
|
|
|
|
|
using System.Linq;
|
|
|
|
|
|
using System.Threading;
|
Media Picker v3 (#9461)
* set input file accept
* Use PreValue file extensions for limiting the files to be chosen in file input
* Current state for Warren to review
* This should fix up what you need Niels
* update csproj
* use empty string if fileExtensions is undefined
* public interface
* initial work
* local crops
* translations
* translation correction
* fix misspeling
* some progress
* filter media picker
* align media card grid items correctly
* responsive media cropper
* always be able to scale 3 times smallest scale
* making image cropper property editor responsive
* scroll to scale
* adjust slider look
* rearrange parts of mediaentryeditor
* test helper
* styling
* move controls inside umb-image-crop
* seperate umg-cropper-gravity styling
* corrected layout
* more ui refinement
* keep the idea of mandatory out for now.
* remove double ;
* removed testing code
* JSON Property Value Convertor now has an array of property editors to exclude
* Property Value Convertor for Media Picker 3 aka Media Picker with Local Crops
* Experimenting on best approach to retrieve local crop in razor view when iterating over picked media items
* Update ValueConvertor to use ImageCropperValue as part of the model for views as alot of existing CropUrls can then use it
* Update extension methods to take an ImageCropperValue model (localCropData)
* Forgot to update CSProj for new ValueConvertor
* New GetCropUrl @Url.GetCropUrl(crop.Alias, media.LocalCrops) as oppposed to @Url.GetCropUrl(media.LocalCrops, cropAlias:crop.Alias, useCropDimensions: true)
* Remove dupe item in CSProj
* Use a contains as an opposed to Array.IndexOf
* various corrections, SingleMode based on max 1, remove double checkerBackground, enforce validation for Crops, changed error indication
* mediapicker v3
* correct version
* fixing file ext label text color
* clipboard features for MediaPicker v3
* highlight not allowed types
* highlight trashed as an error
* Media Types Video, Sound, Document and Vector Image
* Rename to Audio and VectorGraphics
* Add (SVG) in the name for Vector Graphics
* adding CSV to Documents
* remove this commented code.
* remove this commented code
* number range should not go below 0, at-least as default until we make that configurable.
* use min not ng-min
* description for local crops
* Error/Limits highlighting reactive
* visual adjustments
* Enabling opening filtered folders + corrected select hover states
* Varous fixes to resolve issues with unit tests.
* Refactor MediaType Documents to only contain Article file type
* mark as build-in
* predefined MediaPicker3 DataTypes, renaming v2 to "old"
* set scale bar current value after min and max has been set
* added missing }
* update when focal point is dragged
* adjusted styling for Image Cropper property editor
* correcting comment
* remove todo - message for trashed media items works
* Changed parameter ordering
* Introduced new extension method on MediaWithCrops to get croppings urls in with full path
* Reintroducing Single Item Mode
* use Multiple instead of SingleMode
* renaming and adding multiple to preconfigured datatypes
* Change existing media picker to use the Clipboard type MEDIA, enabling shared functionality.
* clean up unused clipboard parts
* adjusted to new amount
* correcting test
* Fix unit test
* Move MediaWithCrops to separate file and move to Core.Models
* parseContentForPaste
* clean up
* ensure crops is an array.
* actively enable focal points, so we dont set focal points that aren't used.
* only accept files that matches file extensions from Umbraco Settings
* Cleanup
* Add references from MediaPicker3 to media
* corrections from various feedback
* remove comment
* correct wording
* use windowResizeListener
Co-authored-by: Warren Buckley <warren@umbraco.com>
Co-authored-by: Niels Lyngsø <nsl@umbraco.com>
Co-authored-by: Mads Rasmussen <madsr@hey.com>
Co-authored-by: Andy Butland <abutland73@gmail.com>
Co-authored-by: Bjarke Berg <mail@bergmania.dk>
Co-authored-by: Sebastiaan Janssen <sebastiaan@umbraco.com>
Co-authored-by: Elitsa Marinovska <elm@umbraco.dk>
2021-04-22 10:28:53 +02:00
|
|
|
|
using System.Web;
|
2018-06-29 19:52:40 +02:00
|
|
|
|
using System.Xml;
|
Media Picker v3 (#9461)
* set input file accept
* Use PreValue file extensions for limiting the files to be chosen in file input
* Current state for Warren to review
* This should fix up what you need Niels
* update csproj
* use empty string if fileExtensions is undefined
* public interface
* initial work
* local crops
* translations
* translation correction
* fix misspeling
* some progress
* filter media picker
* align media card grid items correctly
* responsive media cropper
* always be able to scale 3 times smallest scale
* making image cropper property editor responsive
* scroll to scale
* adjust slider look
* rearrange parts of mediaentryeditor
* test helper
* styling
* move controls inside umb-image-crop
* seperate umg-cropper-gravity styling
* corrected layout
* more ui refinement
* keep the idea of mandatory out for now.
* remove double ;
* removed testing code
* JSON Property Value Convertor now has an array of property editors to exclude
* Property Value Convertor for Media Picker 3 aka Media Picker with Local Crops
* Experimenting on best approach to retrieve local crop in razor view when iterating over picked media items
* Update ValueConvertor to use ImageCropperValue as part of the model for views as alot of existing CropUrls can then use it
* Update extension methods to take an ImageCropperValue model (localCropData)
* Forgot to update CSProj for new ValueConvertor
* New GetCropUrl @Url.GetCropUrl(crop.Alias, media.LocalCrops) as oppposed to @Url.GetCropUrl(media.LocalCrops, cropAlias:crop.Alias, useCropDimensions: true)
* Remove dupe item in CSProj
* Use a contains as an opposed to Array.IndexOf
* various corrections, SingleMode based on max 1, remove double checkerBackground, enforce validation for Crops, changed error indication
* mediapicker v3
* correct version
* fixing file ext label text color
* clipboard features for MediaPicker v3
* highlight not allowed types
* highlight trashed as an error
* Media Types Video, Sound, Document and Vector Image
* Rename to Audio and VectorGraphics
* Add (SVG) in the name for Vector Graphics
* adding CSV to Documents
* remove this commented code.
* remove this commented code
* number range should not go below 0, at-least as default until we make that configurable.
* use min not ng-min
* description for local crops
* Error/Limits highlighting reactive
* visual adjustments
* Enabling opening filtered folders + corrected select hover states
* Varous fixes to resolve issues with unit tests.
* Refactor MediaType Documents to only contain Article file type
* mark as build-in
* predefined MediaPicker3 DataTypes, renaming v2 to "old"
* set scale bar current value after min and max has been set
* added missing }
* update when focal point is dragged
* adjusted styling for Image Cropper property editor
* correcting comment
* remove todo - message for trashed media items works
* Changed parameter ordering
* Introduced new extension method on MediaWithCrops to get croppings urls in with full path
* Reintroducing Single Item Mode
* use Multiple instead of SingleMode
* renaming and adding multiple to preconfigured datatypes
* Change existing media picker to use the Clipboard type MEDIA, enabling shared functionality.
* clean up unused clipboard parts
* adjusted to new amount
* correcting test
* Fix unit test
* Move MediaWithCrops to separate file and move to Core.Models
* parseContentForPaste
* clean up
* ensure crops is an array.
* actively enable focal points, so we dont set focal points that aren't used.
* only accept files that matches file extensions from Umbraco Settings
* Cleanup
* Add references from MediaPicker3 to media
* corrections from various feedback
* remove comment
* correct wording
* use windowResizeListener
Co-authored-by: Warren Buckley <warren@umbraco.com>
Co-authored-by: Niels Lyngsø <nsl@umbraco.com>
Co-authored-by: Mads Rasmussen <madsr@hey.com>
Co-authored-by: Andy Butland <abutland73@gmail.com>
Co-authored-by: Bjarke Berg <mail@bergmania.dk>
Co-authored-by: Sebastiaan Janssen <sebastiaan@umbraco.com>
Co-authored-by: Elitsa Marinovska <elm@umbraco.dk>
2021-04-22 10:28:53 +02:00
|
|
|
|
using System.Xml.Linq;
|
|
|
|
|
|
using System.Xml.XPath;
|
|
|
|
|
|
using Umbraco.Core;
|
2018-06-29 19:52:40 +02:00
|
|
|
|
using Umbraco.Core.Cache;
|
2018-07-20 16:39:39 +02:00
|
|
|
|
using Umbraco.Core.Composing;
|
Media Picker v3 (#9461)
* set input file accept
* Use PreValue file extensions for limiting the files to be chosen in file input
* Current state for Warren to review
* This should fix up what you need Niels
* update csproj
* use empty string if fileExtensions is undefined
* public interface
* initial work
* local crops
* translations
* translation correction
* fix misspeling
* some progress
* filter media picker
* align media card grid items correctly
* responsive media cropper
* always be able to scale 3 times smallest scale
* making image cropper property editor responsive
* scroll to scale
* adjust slider look
* rearrange parts of mediaentryeditor
* test helper
* styling
* move controls inside umb-image-crop
* seperate umg-cropper-gravity styling
* corrected layout
* more ui refinement
* keep the idea of mandatory out for now.
* remove double ;
* removed testing code
* JSON Property Value Convertor now has an array of property editors to exclude
* Property Value Convertor for Media Picker 3 aka Media Picker with Local Crops
* Experimenting on best approach to retrieve local crop in razor view when iterating over picked media items
* Update ValueConvertor to use ImageCropperValue as part of the model for views as alot of existing CropUrls can then use it
* Update extension methods to take an ImageCropperValue model (localCropData)
* Forgot to update CSProj for new ValueConvertor
* New GetCropUrl @Url.GetCropUrl(crop.Alias, media.LocalCrops) as oppposed to @Url.GetCropUrl(media.LocalCrops, cropAlias:crop.Alias, useCropDimensions: true)
* Remove dupe item in CSProj
* Use a contains as an opposed to Array.IndexOf
* various corrections, SingleMode based on max 1, remove double checkerBackground, enforce validation for Crops, changed error indication
* mediapicker v3
* correct version
* fixing file ext label text color
* clipboard features for MediaPicker v3
* highlight not allowed types
* highlight trashed as an error
* Media Types Video, Sound, Document and Vector Image
* Rename to Audio and VectorGraphics
* Add (SVG) in the name for Vector Graphics
* adding CSV to Documents
* remove this commented code.
* remove this commented code
* number range should not go below 0, at-least as default until we make that configurable.
* use min not ng-min
* description for local crops
* Error/Limits highlighting reactive
* visual adjustments
* Enabling opening filtered folders + corrected select hover states
* Varous fixes to resolve issues with unit tests.
* Refactor MediaType Documents to only contain Article file type
* mark as build-in
* predefined MediaPicker3 DataTypes, renaming v2 to "old"
* set scale bar current value after min and max has been set
* added missing }
* update when focal point is dragged
* adjusted styling for Image Cropper property editor
* correcting comment
* remove todo - message for trashed media items works
* Changed parameter ordering
* Introduced new extension method on MediaWithCrops to get croppings urls in with full path
* Reintroducing Single Item Mode
* use Multiple instead of SingleMode
* renaming and adding multiple to preconfigured datatypes
* Change existing media picker to use the Clipboard type MEDIA, enabling shared functionality.
* clean up unused clipboard parts
* adjusted to new amount
* correcting test
* Fix unit test
* Move MediaWithCrops to separate file and move to Core.Models
* parseContentForPaste
* clean up
* ensure crops is an array.
* actively enable focal points, so we dont set focal points that aren't used.
* only accept files that matches file extensions from Umbraco Settings
* Cleanup
* Add references from MediaPicker3 to media
* corrections from various feedback
* remove comment
* correct wording
* use windowResizeListener
Co-authored-by: Warren Buckley <warren@umbraco.com>
Co-authored-by: Niels Lyngsø <nsl@umbraco.com>
Co-authored-by: Mads Rasmussen <madsr@hey.com>
Co-authored-by: Andy Butland <abutland73@gmail.com>
Co-authored-by: Bjarke Berg <mail@bergmania.dk>
Co-authored-by: Sebastiaan Janssen <sebastiaan@umbraco.com>
Co-authored-by: Elitsa Marinovska <elm@umbraco.dk>
2021-04-22 10:28:53 +02:00
|
|
|
|
using Umbraco.Core.Models;
|
2018-06-29 19:52:40 +02:00
|
|
|
|
using Umbraco.Core.Models.Membership;
|
Media Picker v3 (#9461)
* set input file accept
* Use PreValue file extensions for limiting the files to be chosen in file input
* Current state for Warren to review
* This should fix up what you need Niels
* update csproj
* use empty string if fileExtensions is undefined
* public interface
* initial work
* local crops
* translations
* translation correction
* fix misspeling
* some progress
* filter media picker
* align media card grid items correctly
* responsive media cropper
* always be able to scale 3 times smallest scale
* making image cropper property editor responsive
* scroll to scale
* adjust slider look
* rearrange parts of mediaentryeditor
* test helper
* styling
* move controls inside umb-image-crop
* seperate umg-cropper-gravity styling
* corrected layout
* more ui refinement
* keep the idea of mandatory out for now.
* remove double ;
* removed testing code
* JSON Property Value Convertor now has an array of property editors to exclude
* Property Value Convertor for Media Picker 3 aka Media Picker with Local Crops
* Experimenting on best approach to retrieve local crop in razor view when iterating over picked media items
* Update ValueConvertor to use ImageCropperValue as part of the model for views as alot of existing CropUrls can then use it
* Update extension methods to take an ImageCropperValue model (localCropData)
* Forgot to update CSProj for new ValueConvertor
* New GetCropUrl @Url.GetCropUrl(crop.Alias, media.LocalCrops) as oppposed to @Url.GetCropUrl(media.LocalCrops, cropAlias:crop.Alias, useCropDimensions: true)
* Remove dupe item in CSProj
* Use a contains as an opposed to Array.IndexOf
* various corrections, SingleMode based on max 1, remove double checkerBackground, enforce validation for Crops, changed error indication
* mediapicker v3
* correct version
* fixing file ext label text color
* clipboard features for MediaPicker v3
* highlight not allowed types
* highlight trashed as an error
* Media Types Video, Sound, Document and Vector Image
* Rename to Audio and VectorGraphics
* Add (SVG) in the name for Vector Graphics
* adding CSV to Documents
* remove this commented code.
* remove this commented code
* number range should not go below 0, at-least as default until we make that configurable.
* use min not ng-min
* description for local crops
* Error/Limits highlighting reactive
* visual adjustments
* Enabling opening filtered folders + corrected select hover states
* Varous fixes to resolve issues with unit tests.
* Refactor MediaType Documents to only contain Article file type
* mark as build-in
* predefined MediaPicker3 DataTypes, renaming v2 to "old"
* set scale bar current value after min and max has been set
* added missing }
* update when focal point is dragged
* adjusted styling for Image Cropper property editor
* correcting comment
* remove todo - message for trashed media items works
* Changed parameter ordering
* Introduced new extension method on MediaWithCrops to get croppings urls in with full path
* Reintroducing Single Item Mode
* use Multiple instead of SingleMode
* renaming and adding multiple to preconfigured datatypes
* Change existing media picker to use the Clipboard type MEDIA, enabling shared functionality.
* clean up unused clipboard parts
* adjusted to new amount
* correcting test
* Fix unit test
* Move MediaWithCrops to separate file and move to Core.Models
* parseContentForPaste
* clean up
* ensure crops is an array.
* actively enable focal points, so we dont set focal points that aren't used.
* only accept files that matches file extensions from Umbraco Settings
* Cleanup
* Add references from MediaPicker3 to media
* corrections from various feedback
* remove comment
* correct wording
* use windowResizeListener
Co-authored-by: Warren Buckley <warren@umbraco.com>
Co-authored-by: Niels Lyngsø <nsl@umbraco.com>
Co-authored-by: Mads Rasmussen <madsr@hey.com>
Co-authored-by: Andy Butland <abutland73@gmail.com>
Co-authored-by: Bjarke Berg <mail@bergmania.dk>
Co-authored-by: Sebastiaan Janssen <sebastiaan@umbraco.com>
Co-authored-by: Elitsa Marinovska <elm@umbraco.dk>
2021-04-22 10:28:53 +02:00
|
|
|
|
using Umbraco.Core.Models.PublishedContent;
|
2018-11-26 14:43:08 +11:00
|
|
|
|
using Umbraco.Core.PropertyEditors;
|
2019-01-10 12:44:57 +11:00
|
|
|
|
using Umbraco.Core.Services;
|
Media Picker v3 (#9461)
* set input file accept
* Use PreValue file extensions for limiting the files to be chosen in file input
* Current state for Warren to review
* This should fix up what you need Niels
* update csproj
* use empty string if fileExtensions is undefined
* public interface
* initial work
* local crops
* translations
* translation correction
* fix misspeling
* some progress
* filter media picker
* align media card grid items correctly
* responsive media cropper
* always be able to scale 3 times smallest scale
* making image cropper property editor responsive
* scroll to scale
* adjust slider look
* rearrange parts of mediaentryeditor
* test helper
* styling
* move controls inside umb-image-crop
* seperate umg-cropper-gravity styling
* corrected layout
* more ui refinement
* keep the idea of mandatory out for now.
* remove double ;
* removed testing code
* JSON Property Value Convertor now has an array of property editors to exclude
* Property Value Convertor for Media Picker 3 aka Media Picker with Local Crops
* Experimenting on best approach to retrieve local crop in razor view when iterating over picked media items
* Update ValueConvertor to use ImageCropperValue as part of the model for views as alot of existing CropUrls can then use it
* Update extension methods to take an ImageCropperValue model (localCropData)
* Forgot to update CSProj for new ValueConvertor
* New GetCropUrl @Url.GetCropUrl(crop.Alias, media.LocalCrops) as oppposed to @Url.GetCropUrl(media.LocalCrops, cropAlias:crop.Alias, useCropDimensions: true)
* Remove dupe item in CSProj
* Use a contains as an opposed to Array.IndexOf
* various corrections, SingleMode based on max 1, remove double checkerBackground, enforce validation for Crops, changed error indication
* mediapicker v3
* correct version
* fixing file ext label text color
* clipboard features for MediaPicker v3
* highlight not allowed types
* highlight trashed as an error
* Media Types Video, Sound, Document and Vector Image
* Rename to Audio and VectorGraphics
* Add (SVG) in the name for Vector Graphics
* adding CSV to Documents
* remove this commented code.
* remove this commented code
* number range should not go below 0, at-least as default until we make that configurable.
* use min not ng-min
* description for local crops
* Error/Limits highlighting reactive
* visual adjustments
* Enabling opening filtered folders + corrected select hover states
* Varous fixes to resolve issues with unit tests.
* Refactor MediaType Documents to only contain Article file type
* mark as build-in
* predefined MediaPicker3 DataTypes, renaming v2 to "old"
* set scale bar current value after min and max has been set
* added missing }
* update when focal point is dragged
* adjusted styling for Image Cropper property editor
* correcting comment
* remove todo - message for trashed media items works
* Changed parameter ordering
* Introduced new extension method on MediaWithCrops to get croppings urls in with full path
* Reintroducing Single Item Mode
* use Multiple instead of SingleMode
* renaming and adding multiple to preconfigured datatypes
* Change existing media picker to use the Clipboard type MEDIA, enabling shared functionality.
* clean up unused clipboard parts
* adjusted to new amount
* correcting test
* Fix unit test
* Move MediaWithCrops to separate file and move to Core.Models
* parseContentForPaste
* clean up
* ensure crops is an array.
* actively enable focal points, so we dont set focal points that aren't used.
* only accept files that matches file extensions from Umbraco Settings
* Cleanup
* Add references from MediaPicker3 to media
* corrections from various feedback
* remove comment
* correct wording
* use windowResizeListener
Co-authored-by: Warren Buckley <warren@umbraco.com>
Co-authored-by: Niels Lyngsø <nsl@umbraco.com>
Co-authored-by: Mads Rasmussen <madsr@hey.com>
Co-authored-by: Andy Butland <abutland73@gmail.com>
Co-authored-by: Bjarke Berg <mail@bergmania.dk>
Co-authored-by: Sebastiaan Janssen <sebastiaan@umbraco.com>
Co-authored-by: Elitsa Marinovska <elm@umbraco.dk>
2021-04-22 10:28:53 +02:00
|
|
|
|
using Umbraco.Core.Strings;
|
|
|
|
|
|
using Umbraco.Examine;
|
2019-01-30 17:50:13 +11:00
|
|
|
|
using Umbraco.Tests.LegacyXmlPublishedCache;
|
Media Picker v3 (#9461)
* set input file accept
* Use PreValue file extensions for limiting the files to be chosen in file input
* Current state for Warren to review
* This should fix up what you need Niels
* update csproj
* use empty string if fileExtensions is undefined
* public interface
* initial work
* local crops
* translations
* translation correction
* fix misspeling
* some progress
* filter media picker
* align media card grid items correctly
* responsive media cropper
* always be able to scale 3 times smallest scale
* making image cropper property editor responsive
* scroll to scale
* adjust slider look
* rearrange parts of mediaentryeditor
* test helper
* styling
* move controls inside umb-image-crop
* seperate umg-cropper-gravity styling
* corrected layout
* more ui refinement
* keep the idea of mandatory out for now.
* remove double ;
* removed testing code
* JSON Property Value Convertor now has an array of property editors to exclude
* Property Value Convertor for Media Picker 3 aka Media Picker with Local Crops
* Experimenting on best approach to retrieve local crop in razor view when iterating over picked media items
* Update ValueConvertor to use ImageCropperValue as part of the model for views as alot of existing CropUrls can then use it
* Update extension methods to take an ImageCropperValue model (localCropData)
* Forgot to update CSProj for new ValueConvertor
* New GetCropUrl @Url.GetCropUrl(crop.Alias, media.LocalCrops) as oppposed to @Url.GetCropUrl(media.LocalCrops, cropAlias:crop.Alias, useCropDimensions: true)
* Remove dupe item in CSProj
* Use a contains as an opposed to Array.IndexOf
* various corrections, SingleMode based on max 1, remove double checkerBackground, enforce validation for Crops, changed error indication
* mediapicker v3
* correct version
* fixing file ext label text color
* clipboard features for MediaPicker v3
* highlight not allowed types
* highlight trashed as an error
* Media Types Video, Sound, Document and Vector Image
* Rename to Audio and VectorGraphics
* Add (SVG) in the name for Vector Graphics
* adding CSV to Documents
* remove this commented code.
* remove this commented code
* number range should not go below 0, at-least as default until we make that configurable.
* use min not ng-min
* description for local crops
* Error/Limits highlighting reactive
* visual adjustments
* Enabling opening filtered folders + corrected select hover states
* Varous fixes to resolve issues with unit tests.
* Refactor MediaType Documents to only contain Article file type
* mark as build-in
* predefined MediaPicker3 DataTypes, renaming v2 to "old"
* set scale bar current value after min and max has been set
* added missing }
* update when focal point is dragged
* adjusted styling for Image Cropper property editor
* correcting comment
* remove todo - message for trashed media items works
* Changed parameter ordering
* Introduced new extension method on MediaWithCrops to get croppings urls in with full path
* Reintroducing Single Item Mode
* use Multiple instead of SingleMode
* renaming and adding multiple to preconfigured datatypes
* Change existing media picker to use the Clipboard type MEDIA, enabling shared functionality.
* clean up unused clipboard parts
* adjusted to new amount
* correcting test
* Fix unit test
* Move MediaWithCrops to separate file and move to Core.Models
* parseContentForPaste
* clean up
* ensure crops is an array.
* actively enable focal points, so we dont set focal points that aren't used.
* only accept files that matches file extensions from Umbraco Settings
* Cleanup
* Add references from MediaPicker3 to media
* corrections from various feedback
* remove comment
* correct wording
* use windowResizeListener
Co-authored-by: Warren Buckley <warren@umbraco.com>
Co-authored-by: Niels Lyngsø <nsl@umbraco.com>
Co-authored-by: Mads Rasmussen <madsr@hey.com>
Co-authored-by: Andy Butland <abutland73@gmail.com>
Co-authored-by: Bjarke Berg <mail@bergmania.dk>
Co-authored-by: Sebastiaan Janssen <sebastiaan@umbraco.com>
Co-authored-by: Elitsa Marinovska <elm@umbraco.dk>
2021-04-22 10:28:53 +02:00
|
|
|
|
using Umbraco.Tests.TestHelpers.Entities;
|
|
|
|
|
|
using Umbraco.Tests.Testing;
|
2019-02-15 22:45:30 +01:00
|
|
|
|
using Umbraco.Tests.Testing.Objects.Accessors;
|
Media Picker v3 (#9461)
* set input file accept
* Use PreValue file extensions for limiting the files to be chosen in file input
* Current state for Warren to review
* This should fix up what you need Niels
* update csproj
* use empty string if fileExtensions is undefined
* public interface
* initial work
* local crops
* translations
* translation correction
* fix misspeling
* some progress
* filter media picker
* align media card grid items correctly
* responsive media cropper
* always be able to scale 3 times smallest scale
* making image cropper property editor responsive
* scroll to scale
* adjust slider look
* rearrange parts of mediaentryeditor
* test helper
* styling
* move controls inside umb-image-crop
* seperate umg-cropper-gravity styling
* corrected layout
* more ui refinement
* keep the idea of mandatory out for now.
* remove double ;
* removed testing code
* JSON Property Value Convertor now has an array of property editors to exclude
* Property Value Convertor for Media Picker 3 aka Media Picker with Local Crops
* Experimenting on best approach to retrieve local crop in razor view when iterating over picked media items
* Update ValueConvertor to use ImageCropperValue as part of the model for views as alot of existing CropUrls can then use it
* Update extension methods to take an ImageCropperValue model (localCropData)
* Forgot to update CSProj for new ValueConvertor
* New GetCropUrl @Url.GetCropUrl(crop.Alias, media.LocalCrops) as oppposed to @Url.GetCropUrl(media.LocalCrops, cropAlias:crop.Alias, useCropDimensions: true)
* Remove dupe item in CSProj
* Use a contains as an opposed to Array.IndexOf
* various corrections, SingleMode based on max 1, remove double checkerBackground, enforce validation for Crops, changed error indication
* mediapicker v3
* correct version
* fixing file ext label text color
* clipboard features for MediaPicker v3
* highlight not allowed types
* highlight trashed as an error
* Media Types Video, Sound, Document and Vector Image
* Rename to Audio and VectorGraphics
* Add (SVG) in the name for Vector Graphics
* adding CSV to Documents
* remove this commented code.
* remove this commented code
* number range should not go below 0, at-least as default until we make that configurable.
* use min not ng-min
* description for local crops
* Error/Limits highlighting reactive
* visual adjustments
* Enabling opening filtered folders + corrected select hover states
* Varous fixes to resolve issues with unit tests.
* Refactor MediaType Documents to only contain Article file type
* mark as build-in
* predefined MediaPicker3 DataTypes, renaming v2 to "old"
* set scale bar current value after min and max has been set
* added missing }
* update when focal point is dragged
* adjusted styling for Image Cropper property editor
* correcting comment
* remove todo - message for trashed media items works
* Changed parameter ordering
* Introduced new extension method on MediaWithCrops to get croppings urls in with full path
* Reintroducing Single Item Mode
* use Multiple instead of SingleMode
* renaming and adding multiple to preconfigured datatypes
* Change existing media picker to use the Clipboard type MEDIA, enabling shared functionality.
* clean up unused clipboard parts
* adjusted to new amount
* correcting test
* Fix unit test
* Move MediaWithCrops to separate file and move to Core.Models
* parseContentForPaste
* clean up
* ensure crops is an array.
* actively enable focal points, so we dont set focal points that aren't used.
* only accept files that matches file extensions from Umbraco Settings
* Cleanup
* Add references from MediaPicker3 to media
* corrections from various feedback
* remove comment
* correct wording
* use windowResizeListener
Co-authored-by: Warren Buckley <warren@umbraco.com>
Co-authored-by: Niels Lyngsø <nsl@umbraco.com>
Co-authored-by: Mads Rasmussen <madsr@hey.com>
Co-authored-by: Andy Butland <abutland73@gmail.com>
Co-authored-by: Bjarke Berg <mail@bergmania.dk>
Co-authored-by: Sebastiaan Janssen <sebastiaan@umbraco.com>
Co-authored-by: Elitsa Marinovska <elm@umbraco.dk>
2021-04-22 10:28:53 +02:00
|
|
|
|
using Umbraco.Tests.UmbracoExamine;
|
|
|
|
|
|
using Umbraco.Web;
|
2018-06-29 19:52:40 +02:00
|
|
|
|
|
|
|
|
|
|
namespace Umbraco.Tests.PublishedContent
|
|
|
|
|
|
{
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Tests the typed extension methods on IPublishedContent using the DefaultPublishedMediaStore
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
[TestFixture]
|
|
|
|
|
|
[Apartment(ApartmentState.STA)]
|
|
|
|
|
|
[UmbracoTest(Database = UmbracoTestOptions.Database.NewSchemaPerTest, WithApplication = true)]
|
|
|
|
|
|
public class PublishedMediaTests : PublishedContentTestBase
|
|
|
|
|
|
{
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// sets up resolvers before resolution is frozen
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
protected override void Compose()
|
|
|
|
|
|
{
|
|
|
|
|
|
base.Compose();
|
|
|
|
|
|
|
2018-11-28 17:35:12 +01:00
|
|
|
|
Composition.WithCollectionBuilder<UrlSegmentProviderCollectionBuilder>()
|
2018-06-29 19:52:40 +02:00
|
|
|
|
.Clear()
|
|
|
|
|
|
.Append<DefaultUrlSegmentProvider>();
|
2019-02-15 22:45:30 +01:00
|
|
|
|
|
|
|
|
|
|
Composition.RegisterUnique<IUmbracoContextAccessor, TestUmbracoContextAccessor>();
|
2018-06-29 19:52:40 +02:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private IMediaType MakeNewMediaType(IUser user, string text, int parentId = -1)
|
|
|
|
|
|
{
|
|
|
|
|
|
var mt = new MediaType(parentId) { Name = text, Alias = text, Thumbnail = "icon-folder", Icon = "icon-folder" };
|
|
|
|
|
|
ServiceContext.MediaTypeService.Save(mt);
|
|
|
|
|
|
return mt;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private IMedia MakeNewMedia(string name, IMediaType mediaType, IUser user, int parentId)
|
|
|
|
|
|
{
|
|
|
|
|
|
var m = ServiceContext.MediaService.CreateMediaWithIdentity(name, parentId, mediaType.Alias);
|
|
|
|
|
|
return m;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Shared with PublishMediaStoreTests
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="id"></param>
|
|
|
|
|
|
/// <param name="umbracoContext"></param>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
internal IPublishedContent GetNode(int id, UmbracoContext umbracoContext)
|
|
|
|
|
|
{
|
2019-01-10 12:44:57 +11:00
|
|
|
|
var cache = new PublishedMediaCache(new XmlStore((XmlDocument)null, null, null, null),
|
2019-01-18 08:29:16 +01:00
|
|
|
|
ServiceContext.MediaService, ServiceContext.UserService, new DictionaryAppCache(), ContentTypesCache,
|
2019-01-23 14:16:42 +01:00
|
|
|
|
Factory.GetInstance<IEntityXmlSerializer>(), Factory.GetInstance<IUmbracoContextAccessor>());
|
2018-06-29 19:52:40 +02:00
|
|
|
|
var doc = cache.GetById(id);
|
|
|
|
|
|
Assert.IsNotNull(doc);
|
|
|
|
|
|
return doc;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private IPublishedContent GetNode(int id)
|
|
|
|
|
|
{
|
|
|
|
|
|
return GetNode(id, GetUmbracoContext("/test"));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
|
|
public void Get_Property_Value_Uses_Converter()
|
|
|
|
|
|
{
|
|
|
|
|
|
var mType = MockedContentTypes.CreateImageMediaType("image2");
|
|
|
|
|
|
//lets add an RTE to this
|
|
|
|
|
|
mType.PropertyGroups.First().PropertyTypes.Add(
|
|
|
|
|
|
new PropertyType("test", ValueStorageType.Nvarchar, "content")
|
|
|
|
|
|
{
|
|
|
|
|
|
Name = "Rich Text",
|
|
|
|
|
|
DataTypeId = -87 //tiny mce
|
|
|
|
|
|
});
|
Media Picker v3 (#9461)
* set input file accept
* Use PreValue file extensions for limiting the files to be chosen in file input
* Current state for Warren to review
* This should fix up what you need Niels
* update csproj
* use empty string if fileExtensions is undefined
* public interface
* initial work
* local crops
* translations
* translation correction
* fix misspeling
* some progress
* filter media picker
* align media card grid items correctly
* responsive media cropper
* always be able to scale 3 times smallest scale
* making image cropper property editor responsive
* scroll to scale
* adjust slider look
* rearrange parts of mediaentryeditor
* test helper
* styling
* move controls inside umb-image-crop
* seperate umg-cropper-gravity styling
* corrected layout
* more ui refinement
* keep the idea of mandatory out for now.
* remove double ;
* removed testing code
* JSON Property Value Convertor now has an array of property editors to exclude
* Property Value Convertor for Media Picker 3 aka Media Picker with Local Crops
* Experimenting on best approach to retrieve local crop in razor view when iterating over picked media items
* Update ValueConvertor to use ImageCropperValue as part of the model for views as alot of existing CropUrls can then use it
* Update extension methods to take an ImageCropperValue model (localCropData)
* Forgot to update CSProj for new ValueConvertor
* New GetCropUrl @Url.GetCropUrl(crop.Alias, media.LocalCrops) as oppposed to @Url.GetCropUrl(media.LocalCrops, cropAlias:crop.Alias, useCropDimensions: true)
* Remove dupe item in CSProj
* Use a contains as an opposed to Array.IndexOf
* various corrections, SingleMode based on max 1, remove double checkerBackground, enforce validation for Crops, changed error indication
* mediapicker v3
* correct version
* fixing file ext label text color
* clipboard features for MediaPicker v3
* highlight not allowed types
* highlight trashed as an error
* Media Types Video, Sound, Document and Vector Image
* Rename to Audio and VectorGraphics
* Add (SVG) in the name for Vector Graphics
* adding CSV to Documents
* remove this commented code.
* remove this commented code
* number range should not go below 0, at-least as default until we make that configurable.
* use min not ng-min
* description for local crops
* Error/Limits highlighting reactive
* visual adjustments
* Enabling opening filtered folders + corrected select hover states
* Varous fixes to resolve issues with unit tests.
* Refactor MediaType Documents to only contain Article file type
* mark as build-in
* predefined MediaPicker3 DataTypes, renaming v2 to "old"
* set scale bar current value after min and max has been set
* added missing }
* update when focal point is dragged
* adjusted styling for Image Cropper property editor
* correcting comment
* remove todo - message for trashed media items works
* Changed parameter ordering
* Introduced new extension method on MediaWithCrops to get croppings urls in with full path
* Reintroducing Single Item Mode
* use Multiple instead of SingleMode
* renaming and adding multiple to preconfigured datatypes
* Change existing media picker to use the Clipboard type MEDIA, enabling shared functionality.
* clean up unused clipboard parts
* adjusted to new amount
* correcting test
* Fix unit test
* Move MediaWithCrops to separate file and move to Core.Models
* parseContentForPaste
* clean up
* ensure crops is an array.
* actively enable focal points, so we dont set focal points that aren't used.
* only accept files that matches file extensions from Umbraco Settings
* Cleanup
* Add references from MediaPicker3 to media
* corrections from various feedback
* remove comment
* correct wording
* use windowResizeListener
Co-authored-by: Warren Buckley <warren@umbraco.com>
Co-authored-by: Niels Lyngsø <nsl@umbraco.com>
Co-authored-by: Mads Rasmussen <madsr@hey.com>
Co-authored-by: Andy Butland <abutland73@gmail.com>
Co-authored-by: Bjarke Berg <mail@bergmania.dk>
Co-authored-by: Sebastiaan Janssen <sebastiaan@umbraco.com>
Co-authored-by: Elitsa Marinovska <elm@umbraco.dk>
2021-04-22 10:28:53 +02:00
|
|
|
|
var existing = ServiceContext.MediaTypeService.GetAll();
|
2018-06-29 19:52:40 +02:00
|
|
|
|
ServiceContext.MediaTypeService.Save(mType);
|
|
|
|
|
|
var media = MockedMedia.CreateMediaImage(mType, -1);
|
|
|
|
|
|
media.Properties["content"].SetValue("<div>This is some content</div>");
|
|
|
|
|
|
ServiceContext.MediaService.Save(media);
|
|
|
|
|
|
|
|
|
|
|
|
var publishedMedia = GetNode(media.Id);
|
|
|
|
|
|
|
|
|
|
|
|
var propVal = publishedMedia.Value("content");
|
|
|
|
|
|
Assert.IsInstanceOf<IHtmlString>(propVal);
|
|
|
|
|
|
Assert.AreEqual("<div>This is some content</div>", propVal.ToString());
|
|
|
|
|
|
|
|
|
|
|
|
var propVal2 = publishedMedia.Value<IHtmlString>("content");
|
|
|
|
|
|
Assert.IsInstanceOf<IHtmlString>(propVal2);
|
|
|
|
|
|
Assert.AreEqual("<div>This is some content</div>", propVal2.ToString());
|
|
|
|
|
|
|
|
|
|
|
|
var propVal3 = publishedMedia.Value("Content");
|
2019-01-07 10:43:28 +01:00
|
|
|
|
Assert.IsInstanceOf<IHtmlString>(propVal3);
|
2018-06-29 19:52:40 +02:00
|
|
|
|
Assert.AreEqual("<div>This is some content</div>", propVal3.ToString());
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
|
|
public void Ensure_Children_Sorted_With_Examine()
|
|
|
|
|
|
{
|
2018-12-07 13:24:25 +01:00
|
|
|
|
var rebuilder = IndexInitializer.GetMediaIndexRebuilder(Factory.GetInstance<PropertyEditorCollection>(), IndexInitializer.GetMockMediaService());
|
2018-11-28 01:23:02 +11:00
|
|
|
|
|
2018-06-29 19:52:40 +02:00
|
|
|
|
using (var luceneDir = new RandomIdRamDirectory())
|
2018-11-28 18:39:03 +11:00
|
|
|
|
using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, luceneDir,
|
|
|
|
|
|
validator: new ContentValueSetValidator(true)))
|
2018-12-10 14:06:25 +11:00
|
|
|
|
using (indexer.ProcessNonAsync())
|
2018-06-29 19:52:40 +02:00
|
|
|
|
{
|
2018-12-10 14:06:25 +11:00
|
|
|
|
rebuilder.RegisterIndex(indexer.Name);
|
2018-11-28 01:23:02 +11:00
|
|
|
|
rebuilder.Populate(indexer);
|
2018-06-29 19:52:40 +02:00
|
|
|
|
|
|
|
|
|
|
var searcher = indexer.GetSearcher();
|
|
|
|
|
|
var ctx = GetUmbracoContext("/test");
|
2019-02-15 22:45:30 +01:00
|
|
|
|
var cache = new PublishedMediaCache(ServiceContext.MediaService, ServiceContext.UserService, searcher, new DictionaryAppCache(), ContentTypesCache, Factory.GetInstance<IEntityXmlSerializer>(), Factory.GetInstance<IUmbracoContextAccessor>());
|
2018-06-29 19:52:40 +02:00
|
|
|
|
|
|
|
|
|
|
//we are using the media.xml media to test the examine results implementation, see the media.xml file in the ExamineHelpers namespace
|
|
|
|
|
|
var publishedMedia = cache.GetById(1111);
|
|
|
|
|
|
var rootChildren = publishedMedia.Children().ToArray();
|
|
|
|
|
|
var currSort = 0;
|
|
|
|
|
|
for (var i = 0; i < rootChildren.Count(); i++)
|
|
|
|
|
|
{
|
|
|
|
|
|
Assert.GreaterOrEqual(rootChildren[i].SortOrder, currSort);
|
|
|
|
|
|
currSort = rootChildren[i].SortOrder;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
|
|
public void Do_Not_Find_In_Recycle_Bin()
|
|
|
|
|
|
{
|
2018-12-07 13:24:25 +01:00
|
|
|
|
var rebuilder = IndexInitializer.GetMediaIndexRebuilder(Factory.GetInstance<PropertyEditorCollection>(), IndexInitializer.GetMockMediaService());
|
2018-11-28 01:23:02 +11:00
|
|
|
|
|
2018-06-29 19:52:40 +02:00
|
|
|
|
using (var luceneDir = new RandomIdRamDirectory())
|
2018-11-28 18:39:03 +11:00
|
|
|
|
using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, luceneDir,
|
2018-04-03 12:33:21 +10:00
|
|
|
|
//include unpublished content since this uses the 'internal' indexer, it's up to the media cache to filter
|
2018-12-10 14:11:41 +11:00
|
|
|
|
validator: new ContentValueSetValidator(false)))
|
2018-06-29 19:52:40 +02:00
|
|
|
|
using (indexer.ProcessNonAsync())
|
|
|
|
|
|
{
|
2018-12-10 14:06:25 +11:00
|
|
|
|
rebuilder.RegisterIndex(indexer.Name);
|
2018-11-28 01:23:02 +11:00
|
|
|
|
rebuilder.Populate(indexer);
|
2018-06-29 19:52:40 +02:00
|
|
|
|
|
|
|
|
|
|
var searcher = indexer.GetSearcher();
|
|
|
|
|
|
var ctx = GetUmbracoContext("/test");
|
2019-02-15 22:45:30 +01:00
|
|
|
|
var cache = new PublishedMediaCache(ServiceContext.MediaService, ServiceContext.UserService, searcher, new DictionaryAppCache(), ContentTypesCache, Factory.GetInstance<IEntityXmlSerializer>(), Factory.GetInstance<IUmbracoContextAccessor>());
|
2018-06-29 19:52:40 +02:00
|
|
|
|
|
|
|
|
|
|
//ensure it is found
|
|
|
|
|
|
var publishedMedia = cache.GetById(3113);
|
|
|
|
|
|
Assert.IsNotNull(publishedMedia);
|
|
|
|
|
|
|
|
|
|
|
|
//move item to recycle bin
|
|
|
|
|
|
var newXml = XElement.Parse(@"<node id='3113' key='5b3e46ab-3e37-4cfa-ab70-014234b5bd33' parentID='-21' level='1' writerID='0' nodeType='1032' template='0' sortOrder='2' createDate='2010-05-19T17:32:46' updateDate='2010-05-19T17:32:46' nodeName='Another Umbraco Image' urlName='acnestressscrub' writerName='Administrator' nodeTypeAlias='Image' path='-1,-21,3113'>
|
|
|
|
|
|
<data alias='umbracoFile'><![CDATA[/media/1234/blah.pdf]]></data>
|
|
|
|
|
|
<data alias='umbracoWidth'>115</data>
|
|
|
|
|
|
<data alias='umbracoHeight'>268</data>
|
|
|
|
|
|
<data alias='umbracoBytes'>10726</data>
|
|
|
|
|
|
<data alias='umbracoExtension'>jpg</data>
|
|
|
|
|
|
</node>");
|
|
|
|
|
|
indexer.IndexItems(new[]{ newXml.ConvertToValueSet("media") });
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//ensure it still exists in the index (raw examine search)
|
2018-12-17 12:17:03 +11:00
|
|
|
|
var criteria = searcher.CreateQuery();
|
2018-06-29 19:52:40 +02:00
|
|
|
|
var filter = criteria.Id(3113);
|
2018-12-17 12:17:03 +11:00
|
|
|
|
var found = filter.Execute();
|
2018-06-29 19:52:40 +02:00
|
|
|
|
Assert.IsNotNull(found);
|
|
|
|
|
|
Assert.AreEqual(1, found.TotalItemCount);
|
|
|
|
|
|
|
|
|
|
|
|
//ensure it does not show up in the published media store
|
|
|
|
|
|
var recycledMedia = cache.GetById(3113);
|
|
|
|
|
|
Assert.IsNull(recycledMedia);
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
|
|
public void Children_With_Examine()
|
|
|
|
|
|
{
|
2018-12-07 13:24:25 +01:00
|
|
|
|
var rebuilder = IndexInitializer.GetMediaIndexRebuilder(Factory.GetInstance<PropertyEditorCollection>(), IndexInitializer.GetMockMediaService());
|
2018-11-28 01:23:02 +11:00
|
|
|
|
|
2018-06-29 19:52:40 +02:00
|
|
|
|
using (var luceneDir = new RandomIdRamDirectory())
|
2018-11-28 18:39:03 +11:00
|
|
|
|
using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, luceneDir,
|
|
|
|
|
|
validator: new ContentValueSetValidator(true)))
|
2018-06-29 19:52:40 +02:00
|
|
|
|
using (indexer.ProcessNonAsync())
|
|
|
|
|
|
{
|
2018-12-10 14:06:25 +11:00
|
|
|
|
rebuilder.RegisterIndex(indexer.Name);
|
2018-11-28 01:23:02 +11:00
|
|
|
|
rebuilder.Populate(indexer);
|
2018-06-29 19:52:40 +02:00
|
|
|
|
|
|
|
|
|
|
var searcher = indexer.GetSearcher();
|
|
|
|
|
|
var ctx = GetUmbracoContext("/test");
|
2019-02-15 22:45:30 +01:00
|
|
|
|
var cache = new PublishedMediaCache(ServiceContext.MediaService, ServiceContext.UserService, searcher, new DictionaryAppCache(), ContentTypesCache, Factory.GetInstance<IEntityXmlSerializer>(), Factory.GetInstance<IUmbracoContextAccessor>());
|
2018-06-29 19:52:40 +02:00
|
|
|
|
|
|
|
|
|
|
//we are using the media.xml media to test the examine results implementation, see the media.xml file in the ExamineHelpers namespace
|
|
|
|
|
|
var publishedMedia = cache.GetById(1111);
|
|
|
|
|
|
var rootChildren = publishedMedia.Children();
|
|
|
|
|
|
Assert.IsTrue(rootChildren.Select(x => x.Id).ContainsAll(new[] { 2222, 1113, 1114, 1115, 1116 }));
|
|
|
|
|
|
|
|
|
|
|
|
var publishedChild1 = cache.GetById(2222);
|
|
|
|
|
|
var subChildren = publishedChild1.Children();
|
|
|
|
|
|
Assert.IsTrue(subChildren.Select(x => x.Id).ContainsAll(new[] { 2112 }));
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
|
|
public void Descendants_With_Examine()
|
|
|
|
|
|
{
|
2018-12-07 13:24:25 +01:00
|
|
|
|
var rebuilder = IndexInitializer.GetMediaIndexRebuilder(Factory.GetInstance<PropertyEditorCollection>(), IndexInitializer.GetMockMediaService());
|
2018-11-28 01:23:02 +11:00
|
|
|
|
|
2018-06-29 19:52:40 +02:00
|
|
|
|
using (var luceneDir = new RandomIdRamDirectory())
|
2018-11-28 18:39:03 +11:00
|
|
|
|
using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, luceneDir,
|
|
|
|
|
|
validator: new ContentValueSetValidator(true)))
|
2018-06-29 19:52:40 +02:00
|
|
|
|
using (indexer.ProcessNonAsync())
|
|
|
|
|
|
{
|
2018-12-10 14:06:25 +11:00
|
|
|
|
rebuilder.RegisterIndex(indexer.Name);
|
2018-11-28 01:23:02 +11:00
|
|
|
|
rebuilder.Populate(indexer);
|
2018-06-29 19:52:40 +02:00
|
|
|
|
|
|
|
|
|
|
var searcher = indexer.GetSearcher();
|
|
|
|
|
|
var ctx = GetUmbracoContext("/test");
|
2019-02-15 22:45:30 +01:00
|
|
|
|
var cache = new PublishedMediaCache(ServiceContext.MediaService, ServiceContext.UserService, searcher, new DictionaryAppCache(), ContentTypesCache, Factory.GetInstance<IEntityXmlSerializer>(), Factory.GetInstance<IUmbracoContextAccessor>());
|
2018-06-29 19:52:40 +02:00
|
|
|
|
|
|
|
|
|
|
//we are using the media.xml media to test the examine results implementation, see the media.xml file in the ExamineHelpers namespace
|
|
|
|
|
|
var publishedMedia = cache.GetById(1111);
|
|
|
|
|
|
var rootDescendants = publishedMedia.Descendants();
|
|
|
|
|
|
Assert.IsTrue(rootDescendants.Select(x => x.Id).ContainsAll(new[] { 2112, 2222, 1113, 1114, 1115, 1116 }));
|
|
|
|
|
|
|
|
|
|
|
|
var publishedChild1 = cache.GetById(2222);
|
|
|
|
|
|
var subDescendants = publishedChild1.Descendants();
|
|
|
|
|
|
Assert.IsTrue(subDescendants.Select(x => x.Id).ContainsAll(new[] { 2112, 3113 }));
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
|
|
public void DescendantsOrSelf_With_Examine()
|
|
|
|
|
|
{
|
2018-12-07 13:24:25 +01:00
|
|
|
|
var rebuilder = IndexInitializer.GetMediaIndexRebuilder(Factory.GetInstance<PropertyEditorCollection>(), IndexInitializer.GetMockMediaService());
|
2018-11-28 01:23:02 +11:00
|
|
|
|
|
2018-06-29 19:52:40 +02:00
|
|
|
|
using (var luceneDir = new RandomIdRamDirectory())
|
2018-11-28 18:39:03 +11:00
|
|
|
|
using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, luceneDir,
|
|
|
|
|
|
validator: new ContentValueSetValidator(true)))
|
2018-06-29 19:52:40 +02:00
|
|
|
|
using (indexer.ProcessNonAsync())
|
|
|
|
|
|
{
|
2018-12-10 14:06:25 +11:00
|
|
|
|
rebuilder.RegisterIndex(indexer.Name);
|
2018-11-28 01:23:02 +11:00
|
|
|
|
rebuilder.Populate(indexer);
|
2018-06-29 19:52:40 +02:00
|
|
|
|
|
|
|
|
|
|
var searcher = indexer.GetSearcher();
|
|
|
|
|
|
var ctx = GetUmbracoContext("/test");
|
2019-02-15 22:45:30 +01:00
|
|
|
|
var cache = new PublishedMediaCache(ServiceContext.MediaService, ServiceContext.UserService, searcher, new DictionaryAppCache(), ContentTypesCache, Factory.GetInstance<IEntityXmlSerializer>(), Factory.GetInstance<IUmbracoContextAccessor>());
|
2018-06-29 19:52:40 +02:00
|
|
|
|
|
|
|
|
|
|
//we are using the media.xml media to test the examine results implementation, see the media.xml file in the ExamineHelpers namespace
|
|
|
|
|
|
var publishedMedia = cache.GetById(1111);
|
|
|
|
|
|
var rootDescendants = publishedMedia.DescendantsOrSelf();
|
|
|
|
|
|
Assert.IsTrue(rootDescendants.Select(x => x.Id).ContainsAll(new[] { 1111, 2112, 2222, 1113, 1114, 1115, 1116 }));
|
|
|
|
|
|
|
|
|
|
|
|
var publishedChild1 = cache.GetById(2222);
|
|
|
|
|
|
var subDescendants = publishedChild1.DescendantsOrSelf();
|
|
|
|
|
|
Assert.IsTrue(subDescendants.Select(x => x.Id).ContainsAll(new[] { 2222, 2112, 3113 }));
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
|
|
public void Ancestors_With_Examine()
|
|
|
|
|
|
{
|
2018-12-07 13:24:25 +01:00
|
|
|
|
var rebuilder = IndexInitializer.GetMediaIndexRebuilder(Factory.GetInstance<PropertyEditorCollection>(), IndexInitializer.GetMockMediaService());
|
2018-11-28 01:23:02 +11:00
|
|
|
|
|
|
|
|
|
|
|
2018-06-29 19:52:40 +02:00
|
|
|
|
using (var luceneDir = new RandomIdRamDirectory())
|
2018-11-28 18:39:03 +11:00
|
|
|
|
using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, luceneDir,
|
|
|
|
|
|
validator: new ContentValueSetValidator(true)))
|
2018-06-29 19:52:40 +02:00
|
|
|
|
using (indexer.ProcessNonAsync())
|
|
|
|
|
|
{
|
2018-12-10 14:06:25 +11:00
|
|
|
|
rebuilder.RegisterIndex(indexer.Name);
|
2018-11-28 01:23:02 +11:00
|
|
|
|
rebuilder.Populate(indexer);
|
2018-06-29 19:52:40 +02:00
|
|
|
|
|
|
|
|
|
|
var ctx = GetUmbracoContext("/test");
|
|
|
|
|
|
var searcher = indexer.GetSearcher();
|
2019-02-15 22:45:30 +01:00
|
|
|
|
var cache = new PublishedMediaCache(ServiceContext.MediaService, ServiceContext.UserService, searcher, new DictionaryAppCache(), ContentTypesCache, Factory.GetInstance<IEntityXmlSerializer>(), Factory.GetInstance<IUmbracoContextAccessor>());
|
2018-06-29 19:52:40 +02:00
|
|
|
|
|
|
|
|
|
|
//we are using the media.xml media to test the examine results implementation, see the media.xml file in the ExamineHelpers namespace
|
|
|
|
|
|
var publishedMedia = cache.GetById(3113);
|
|
|
|
|
|
var ancestors = publishedMedia.Ancestors();
|
|
|
|
|
|
Assert.IsTrue(ancestors.Select(x => x.Id).ContainsAll(new[] { 2112, 2222, 1111 }));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
|
|
public void AncestorsOrSelf_With_Examine()
|
|
|
|
|
|
{
|
2018-12-07 13:24:25 +01:00
|
|
|
|
var rebuilder = IndexInitializer.GetMediaIndexRebuilder(Factory.GetInstance<PropertyEditorCollection>(), IndexInitializer.GetMockMediaService());
|
2018-11-28 01:23:02 +11:00
|
|
|
|
|
2018-06-29 19:52:40 +02:00
|
|
|
|
using (var luceneDir = new RandomIdRamDirectory())
|
2018-11-28 18:39:03 +11:00
|
|
|
|
using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, luceneDir,
|
|
|
|
|
|
validator: new ContentValueSetValidator(true)))
|
2018-06-29 19:52:40 +02:00
|
|
|
|
using (indexer.ProcessNonAsync())
|
|
|
|
|
|
{
|
2018-12-10 14:06:25 +11:00
|
|
|
|
rebuilder.RegisterIndex(indexer.Name);
|
2018-11-28 01:23:02 +11:00
|
|
|
|
rebuilder.Populate(indexer);
|
2018-06-29 19:52:40 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var ctx = GetUmbracoContext("/test");
|
|
|
|
|
|
var searcher = indexer.GetSearcher();
|
2019-02-15 22:45:30 +01:00
|
|
|
|
var cache = new PublishedMediaCache(ServiceContext.MediaService, ServiceContext.UserService, searcher, new DictionaryAppCache(), ContentTypesCache, Factory.GetInstance<IEntityXmlSerializer>(), Factory.GetInstance<IUmbracoContextAccessor>());
|
2018-06-29 19:52:40 +02:00
|
|
|
|
|
|
|
|
|
|
//we are using the media.xml media to test the examine results implementation, see the media.xml file in the ExamineHelpers namespace
|
|
|
|
|
|
var publishedMedia = cache.GetById(3113);
|
|
|
|
|
|
var ancestors = publishedMedia.AncestorsOrSelf();
|
|
|
|
|
|
Assert.IsTrue(ancestors.Select(x => x.Id).ContainsAll(new[] { 3113, 2112, 2222, 1111 }));
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
|
|
public void Children_Without_Examine()
|
|
|
|
|
|
{
|
|
|
|
|
|
var user = ServiceContext.UserService.GetUserById(0);
|
|
|
|
|
|
var mType = MakeNewMediaType(user, "TestMediaType");
|
|
|
|
|
|
var mRoot = MakeNewMedia("MediaRoot", mType, user, -1);
|
|
|
|
|
|
|
|
|
|
|
|
var mChild1 = MakeNewMedia("Child1", mType, user, mRoot.Id);
|
|
|
|
|
|
var mChild2 = MakeNewMedia("Child2", mType, user, mRoot.Id);
|
|
|
|
|
|
var mChild3 = MakeNewMedia("Child3", mType, user, mRoot.Id);
|
|
|
|
|
|
|
|
|
|
|
|
var mSubChild1 = MakeNewMedia("SubChild1", mType, user, mChild1.Id);
|
|
|
|
|
|
var mSubChild2 = MakeNewMedia("SubChild2", mType, user, mChild1.Id);
|
|
|
|
|
|
var mSubChild3 = MakeNewMedia("SubChild3", mType, user, mChild1.Id);
|
|
|
|
|
|
|
|
|
|
|
|
var publishedMedia = GetNode(mRoot.Id);
|
|
|
|
|
|
var rootChildren = publishedMedia.Children();
|
|
|
|
|
|
Assert.IsTrue(rootChildren.Select(x => x.Id).ContainsAll(new[] { mChild1.Id, mChild2.Id, mChild3.Id }));
|
|
|
|
|
|
|
|
|
|
|
|
var publishedChild1 = GetNode(mChild1.Id);
|
|
|
|
|
|
var subChildren = publishedChild1.Children();
|
|
|
|
|
|
Assert.IsTrue(subChildren.Select(x => x.Id).ContainsAll(new[] { mSubChild1.Id, mSubChild2.Id, mSubChild3.Id }));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
|
|
public void Descendants_Without_Examine()
|
|
|
|
|
|
{
|
|
|
|
|
|
var user = ServiceContext.UserService.GetUserById(0);
|
|
|
|
|
|
var mType = MakeNewMediaType(user, "TestMediaType");
|
|
|
|
|
|
var mRoot = MakeNewMedia("MediaRoot", mType, user, -1);
|
|
|
|
|
|
|
|
|
|
|
|
var mChild1 = MakeNewMedia("Child1", mType, user, mRoot.Id);
|
|
|
|
|
|
var mChild2 = MakeNewMedia("Child2", mType, user, mRoot.Id);
|
|
|
|
|
|
var mChild3 = MakeNewMedia("Child3", mType, user, mRoot.Id);
|
|
|
|
|
|
|
|
|
|
|
|
var mSubChild1 = MakeNewMedia("SubChild1", mType, user, mChild1.Id);
|
|
|
|
|
|
var mSubChild2 = MakeNewMedia("SubChild2", mType, user, mChild1.Id);
|
|
|
|
|
|
var mSubChild3 = MakeNewMedia("SubChild3", mType, user, mChild1.Id);
|
|
|
|
|
|
|
|
|
|
|
|
var publishedMedia = GetNode(mRoot.Id);
|
|
|
|
|
|
var rootDescendants = publishedMedia.Descendants();
|
|
|
|
|
|
Assert.IsTrue(rootDescendants.Select(x => x.Id).ContainsAll(new[] { mChild1.Id, mChild2.Id, mChild3.Id, mSubChild1.Id, mSubChild2.Id, mSubChild3.Id }));
|
|
|
|
|
|
|
|
|
|
|
|
var publishedChild1 = GetNode(mChild1.Id);
|
|
|
|
|
|
var subDescendants = publishedChild1.Descendants();
|
|
|
|
|
|
Assert.IsTrue(subDescendants.Select(x => x.Id).ContainsAll(new[] { mSubChild1.Id, mSubChild2.Id, mSubChild3.Id }));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
|
|
public void DescendantsOrSelf_Without_Examine()
|
|
|
|
|
|
{
|
|
|
|
|
|
var user = ServiceContext.UserService.GetUserById(0);
|
|
|
|
|
|
var mType = MakeNewMediaType(user, "TestMediaType");
|
|
|
|
|
|
var mRoot = MakeNewMedia("MediaRoot", mType, user, -1);
|
|
|
|
|
|
|
|
|
|
|
|
var mChild1 = MakeNewMedia("Child1", mType, user, mRoot.Id);
|
|
|
|
|
|
var mChild2 = MakeNewMedia("Child2", mType, user, mRoot.Id);
|
|
|
|
|
|
var mChild3 = MakeNewMedia("Child3", mType, user, mRoot.Id);
|
|
|
|
|
|
|
|
|
|
|
|
var mSubChild1 = MakeNewMedia("SubChild1", mType, user, mChild1.Id);
|
|
|
|
|
|
var mSubChild2 = MakeNewMedia("SubChild2", mType, user, mChild1.Id);
|
|
|
|
|
|
var mSubChild3 = MakeNewMedia("SubChild3", mType, user, mChild1.Id);
|
|
|
|
|
|
|
|
|
|
|
|
var publishedMedia = GetNode(mRoot.Id);
|
|
|
|
|
|
var rootDescendantsOrSelf = publishedMedia.DescendantsOrSelf();
|
|
|
|
|
|
Assert.IsTrue(rootDescendantsOrSelf.Select(x => x.Id).ContainsAll(
|
|
|
|
|
|
new[] { mRoot.Id, mChild1.Id, mChild2.Id, mChild3.Id, mSubChild1.Id, mSubChild2.Id, mSubChild3.Id }));
|
|
|
|
|
|
|
|
|
|
|
|
var publishedChild1 = GetNode(mChild1.Id);
|
|
|
|
|
|
var subDescendantsOrSelf = publishedChild1.DescendantsOrSelf();
|
|
|
|
|
|
Assert.IsTrue(subDescendantsOrSelf.Select(x => x.Id).ContainsAll(
|
|
|
|
|
|
new[] { mChild1.Id, mSubChild1.Id, mSubChild2.Id, mSubChild3.Id }));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
|
|
public void Parent_Without_Examine()
|
|
|
|
|
|
{
|
|
|
|
|
|
var user = ServiceContext.UserService.GetUserById(0);
|
|
|
|
|
|
var mType = MakeNewMediaType(user, "TestMediaType");
|
|
|
|
|
|
var mRoot = MakeNewMedia("MediaRoot", mType, user, -1);
|
|
|
|
|
|
|
|
|
|
|
|
var mChild1 = MakeNewMedia("Child1", mType, user, mRoot.Id);
|
|
|
|
|
|
var mChild2 = MakeNewMedia("Child2", mType, user, mRoot.Id);
|
|
|
|
|
|
var mChild3 = MakeNewMedia("Child3", mType, user, mRoot.Id);
|
|
|
|
|
|
|
|
|
|
|
|
var mSubChild1 = MakeNewMedia("SubChild1", mType, user, mChild1.Id);
|
|
|
|
|
|
var mSubChild2 = MakeNewMedia("SubChild2", mType, user, mChild1.Id);
|
|
|
|
|
|
var mSubChild3 = MakeNewMedia("SubChild3", mType, user, mChild1.Id);
|
|
|
|
|
|
|
|
|
|
|
|
var publishedRoot = GetNode(mRoot.Id);
|
|
|
|
|
|
Assert.AreEqual(null, publishedRoot.Parent);
|
|
|
|
|
|
|
|
|
|
|
|
var publishedChild1 = GetNode(mChild1.Id);
|
|
|
|
|
|
Assert.AreEqual(mRoot.Id, publishedChild1.Parent.Id);
|
|
|
|
|
|
|
|
|
|
|
|
var publishedSubChild1 = GetNode(mSubChild1.Id);
|
|
|
|
|
|
Assert.AreEqual(mChild1.Id, publishedSubChild1.Parent.Id);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
|
|
public void Ancestors_Without_Examine()
|
|
|
|
|
|
{
|
|
|
|
|
|
var user = ServiceContext.UserService.GetUserById(0);
|
|
|
|
|
|
var mType = MakeNewMediaType(user, "TestMediaType");
|
|
|
|
|
|
var mRoot = MakeNewMedia("MediaRoot", mType, user, -1);
|
|
|
|
|
|
|
|
|
|
|
|
var mChild1 = MakeNewMedia("Child1", mType, user, mRoot.Id);
|
|
|
|
|
|
var mChild2 = MakeNewMedia("Child2", mType, user, mRoot.Id);
|
|
|
|
|
|
var mChild3 = MakeNewMedia("Child3", mType, user, mRoot.Id);
|
|
|
|
|
|
|
|
|
|
|
|
var mSubChild1 = MakeNewMedia("SubChild1", mType, user, mChild1.Id);
|
|
|
|
|
|
var mSubChild2 = MakeNewMedia("SubChild2", mType, user, mChild1.Id);
|
|
|
|
|
|
var mSubChild3 = MakeNewMedia("SubChild3", mType, user, mChild1.Id);
|
|
|
|
|
|
|
|
|
|
|
|
var publishedSubChild1 = GetNode(mSubChild1.Id);
|
|
|
|
|
|
Assert.IsTrue(publishedSubChild1.Ancestors().Select(x => x.Id).ContainsAll(new[] { mChild1.Id, mRoot.Id }));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
|
|
public void AncestorsOrSelf_Without_Examine()
|
|
|
|
|
|
{
|
|
|
|
|
|
var user = ServiceContext.UserService.GetUserById(0);
|
|
|
|
|
|
var mType = MakeNewMediaType(user, "TestMediaType");
|
|
|
|
|
|
var mRoot = MakeNewMedia("MediaRoot", mType, user, -1);
|
|
|
|
|
|
|
|
|
|
|
|
var mChild1 = MakeNewMedia("Child1", mType, user, mRoot.Id);
|
|
|
|
|
|
var mChild2 = MakeNewMedia("Child2", mType, user, mRoot.Id);
|
|
|
|
|
|
var mChild3 = MakeNewMedia("Child3", mType, user, mRoot.Id);
|
|
|
|
|
|
|
|
|
|
|
|
var mSubChild1 = MakeNewMedia("SubChild1", mType, user, mChild1.Id);
|
|
|
|
|
|
var mSubChild2 = MakeNewMedia("SubChild2", mType, user, mChild1.Id);
|
|
|
|
|
|
var mSubChild3 = MakeNewMedia("SubChild3", mType, user, mChild1.Id);
|
|
|
|
|
|
|
|
|
|
|
|
var publishedSubChild1 = GetNode(mSubChild1.Id);
|
|
|
|
|
|
Assert.IsTrue(publishedSubChild1.AncestorsOrSelf().Select(x => x.Id).ContainsAll(
|
|
|
|
|
|
new[] { mSubChild1.Id, mChild1.Id, mRoot.Id }));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
|
|
public void Convert_From_Standard_Xml()
|
|
|
|
|
|
{
|
|
|
|
|
|
var nodeId = 2112;
|
|
|
|
|
|
|
|
|
|
|
|
var xml = XElement.Parse(@"<Image id=""2112"" version=""5b3e46ab-3e37-4cfa-ab70-014234b5bd39"" parentID=""2222"" level=""3"" writerID=""0"" nodeType=""1032"" template=""0"" sortOrder=""1"" createDate=""2010-05-19T17:32:46"" updateDate=""2010-05-19T17:32:46"" nodeName=""Sam's Umbraco Image"" urlName=""acnestressscrub"" writerName=""Administrator"" nodeTypeAlias=""Image"" path=""-1,1111,2222,2112"" isDoc="""">
|
|
|
|
|
|
<umbracoFile><![CDATA[/media/1234/blah.pdf]]></umbracoFile>
|
|
|
|
|
|
<umbracoWidth>115</umbracoWidth>
|
|
|
|
|
|
<umbracoHeight>268</umbracoHeight>
|
|
|
|
|
|
<umbracoBytes>10726</umbracoBytes>
|
|
|
|
|
|
<umbracoExtension>jpg</umbracoExtension>
|
|
|
|
|
|
<Image id=""3113"" version=""5b3e46ab-3e37-4cfa-ab70-014234b5bd33"" parentID=""2112"" level=""4"" writerID=""0"" nodeType=""1032"" template=""0"" sortOrder=""2"" createDate=""2010-05-19T17:32:46"" updateDate=""2010-05-19T17:32:46"" nodeName=""Another Umbraco Image"" urlName=""acnestressscrub"" writerName=""Administrator"" nodeTypeAlias=""Image"" path=""-1,1111,2222,2112,3113"" isDoc="""">
|
|
|
|
|
|
<umbracoFile><![CDATA[/media/1234/blah.pdf]]></umbracoFile>
|
|
|
|
|
|
<umbracoWidth>115</umbracoWidth>
|
|
|
|
|
|
<umbracoHeight>268</umbracoHeight>
|
|
|
|
|
|
<umbracoBytes>10726</umbracoBytes>
|
|
|
|
|
|
<umbracoExtension>jpg</umbracoExtension>
|
|
|
|
|
|
</Image>
|
|
|
|
|
|
</Image>");
|
|
|
|
|
|
var node = xml.DescendantsAndSelf("Image").Single(x => (int)x.Attribute("id") == nodeId);
|
|
|
|
|
|
|
2019-01-23 14:16:42 +01:00
|
|
|
|
var publishedMedia = new PublishedMediaCache(new XmlStore((XmlDocument)null, null, null, null), ServiceContext.MediaService, ServiceContext.UserService, new DictionaryAppCache(), ContentTypesCache, Factory.GetInstance<IEntityXmlSerializer>(), Factory.GetInstance<IUmbracoContextAccessor>());
|
2018-06-29 19:52:40 +02:00
|
|
|
|
|
|
|
|
|
|
var nav = node.CreateNavigator();
|
|
|
|
|
|
|
|
|
|
|
|
var converted = publishedMedia.CreateFromCacheValues(
|
|
|
|
|
|
publishedMedia.ConvertFromXPathNodeIterator(nav.Select("/Image"), nodeId));
|
|
|
|
|
|
|
|
|
|
|
|
Assert.AreEqual(nodeId, converted.Id);
|
|
|
|
|
|
Assert.AreEqual(3, converted.Level);
|
|
|
|
|
|
Assert.AreEqual(1, converted.SortOrder);
|
|
|
|
|
|
Assert.AreEqual("Sam's Umbraco Image", converted.Name);
|
|
|
|
|
|
Assert.AreEqual("-1,1111,2222,2112", converted.Path);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
|
|
public void Detects_Error_In_Xml()
|
|
|
|
|
|
{
|
|
|
|
|
|
var errorXml = new XElement("error", string.Format("No media is maching '{0}'", 1234));
|
|
|
|
|
|
var nav = errorXml.CreateNavigator();
|
|
|
|
|
|
|
2019-01-23 14:16:42 +01:00
|
|
|
|
var publishedMedia = new PublishedMediaCache(new XmlStore((XmlDocument)null, null, null, null), ServiceContext.MediaService, ServiceContext.UserService, new DictionaryAppCache(), ContentTypesCache, Factory.GetInstance<IEntityXmlSerializer>(), Factory.GetInstance<IUmbracoContextAccessor>());
|
2018-06-29 19:52:40 +02:00
|
|
|
|
var converted = publishedMedia.ConvertFromXPathNodeIterator(nav.Select("/"), 1234);
|
|
|
|
|
|
|
|
|
|
|
|
Assert.IsNull(converted);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|